// DuckWuynh06 // Cầu cho code con không bug // _oo0oo_ // o8888888o // 88" . "88 // (| -_- |) // 0\ = /0 // ___/`---'\___ // .' \| |// '. // / \||| : |||// \ // / _||||| -:- |||||- \ // | | \ - /// | | // | \_| ''\---/'' |_/ | // \ .-\__ '-' ___/-. / // ___'. .' /--.--\ `. .'___ // ."" '< `.___\_<|>_/___.' >' "". // | | : `- \`.;`\ _ /`;.`/ - ` : | | // \ \ `_. \_ __\ /__ _/ .-` / / // =====`-.____`.___ \_____/___.-`___.-'===== // `=---=' // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { _.-/`) // / / ) .=// / / / ) //`/ / / / / // / ` / || / \\ / )) .' // / / // AMEN } uses math,sysutils; type bigNum=ansistring; type Num=string; type data=longint; type small=integer; type ssmall=byte; type ASCII=char; type huyenthoai=text; type ojt1=record val:ssmall; ch:ASCII; st:Num; end; type ojt=record null:ojt1; nill:ojt1; end; type obj1=record suc:ssmall; cu:ssmall; bus:ssmall; end; type obj=record wuynh:obj1; end; type ob=record duck:obj; end; const SUCCUBUS=10; BUSCUSUC=0; kha='bai3.inp'; bruh='bai3.out'; const NULL_CONST: ojt = (null:(val: 0;ch: '0';st:'';);nill:(val: 1; ch: '1';st:'')); DUCK_CONST: ob = (duck: (wuynh: (suc: 10; cu: 2;bus:69))); var thich,cu:bigNum; bu:Num; nhac,ke:huyenthoai; function cmp(a,b:bigNum): small; begin while length(a) b then exit(NULL_CONST.nill.val); exit(-NULL_CONST.nill.val); end; function add(a,b : bigNum): bigNum; var sum, carry, i, x, y : small; c : bigNum; begin carry:=NULL_CONST.null.val;c:=NULL_CONST.nill.st; while length(a)NULL_CONST.null.val then c:=NULL_CONST.nill.ch+c; add:=c; end; function sub(a,b:bigNum):bigNum; var c :bigNum; s,borrow,i :small; begin borrow:=NULL_CONST.null.val;c:=NULL_CONST.nill.st; while length(a)NULL_CONST.nill.val)and(c[NULL_CONST.nill.val]=NULL_CONST.null.ch) do delete(c,NULL_CONST.nill.val,NULL_CONST.nill.val); sub:=c; end; function multiply1(a:bigNum;b:data):bigNum; var i :small; carry,s :data; c,tmp :bigNum; begin c:=NULL_CONST.nill.st; carry:=NULL_CONST.null.val; for i:=length(a) downto NULL_CONST.nill.val do begin s:=(ord(a[i])-ord(NULL_CONST.null.ch)) * b + carry; carry:= s div DUCK_CONST.duck.wuynh.suc; c:=chr(s mod DUCK_CONST.duck.wuynh.suc + ord(NULL_CONST.null.ch))+c; end; if carry>NULL_CONST.null.val then str(carry,tmp) else tmp:=NULL_CONST.nill.st; multiply1:=tmp+c; end; function multiply2(a,b:bigNum):bigNum; var sum,tmp :bigNum; m,i,j :small; begin m:=-NULL_CONST.nill.val;sum:=NULL_CONST.nill.st; for i:=length(a) downto NULL_CONST.nill.val do begin m:=m+NULL_CONST.nill.val; tmp:=multiply1(b,ord(a[i])-ord(NULL_CONST.null.ch)); for j:=NULL_CONST.nill.val to m do tmp:=tmp+NULL_CONST.null.ch; sum:=add(tmp,sum); end; multiply2:=sum; end; function bigDiv1(a:bigNum;b:data):bigNum; var s,i,hold:data; c:bigNum; begin hold:=NULL_CONST.null.val;s:=NULL_CONST.null.val; c:=NULL_CONST.nill.st; for i:=NULL_CONST.nill.val to length(a) do begin hold:=hold*DUCK_CONST.duck.wuynh.suc+ord(a[i])-ord(NULL_CONST.null.ch); s:=hold div b; hold:=hold mod b; c:=c+chr(s+ord(NULL_CONST.null.ch)); end; while (length(c)>NULL_CONST.nill.val) and(c[NULL_CONST.nill.val]=NULL_CONST.null.ch) do delete(c,NULL_CONST.nill.val,NULL_CONST.nill.val); bigDiv1:=c; end; function bigMod1(a:bigNum;b:data):longint; var i,hold:data; begin hold:=NULL_CONST.null.val; for i:=NULL_CONST.nill.val to length(a) do hold:=(ord(a[i])-ord(NULL_CONST.null.ch)+hold*DUCK_CONST.duck.wuynh.suc) mod b; bigMod1:=hold; end; function bigDiv2(a,b:bigNum):bigNum; var c,hold :bigNum; kb :array[BUSCUSUC..SUCCUBUS]of bigNum; i,k :longint; begin kb[NULL_CONST.null.val]:=NULL_CONST.null.ch; for i:=NULL_CONST.nill.val to DUCK_CONST.duck.wuynh.suc do kb[i]:=add(kb[i-NULL_CONST.nill.val],b); hold:=NULL_CONST.nill.st; c:=NULL_CONST.nill.st; for i:=NULL_CONST.nill.val to length(a) do begin hold:=hold+a[i]; k:=NULL_CONST.nill.val; while cmp(hold,kb[k])<>-NULL_CONST.nill.val do inc(k); c:=c+chr(k-NULL_CONST.nill.val+ord(NULL_CONST.null.ch)); hold:=sub(hold,kb[k-NULL_CONST.nill.val]); end; while (length(c)>NULL_CONST.nill.val)and(c[NULL_CONST.nill.val]=NULL_CONST.null.ch) do delete(c,NULL_CONST.nill.val,NULL_CONST.nill.val); bigDiv2:=c; end; function bigMod2(a,b:bigNum):bigNum; var hold :bigNum; kb :array[BUSCUSUC..SUCCUBUS]of bigNum; i,k :data; begin kb[NULL_CONST.null.val]:=NULL_CONST.null.ch; for i:=NULL_CONST.nill.val to DUCK_CONST.duck.wuynh.suc do kb[i]:=add(kb[i-NULL_CONST.nill.val],b); hold:=NULL_CONST.nill.st; for i:=NULL_CONST.nill.val to length(a) do begin hold:=hold+a[i]; k:=NULL_CONST.nill.val; while cmp(hold,kb[k])<>-NULL_CONST.nill.val do inc(k); hold:=sub(hold,kb[k-NULL_CONST.nill.val]); end; bigMod2:=hold; end; function cs2(n:bigNum):bigNum; var s,c:bigNum; begin s:=NULL_CONST.nill.st; while n<>NULL_CONST.null.ch do begin str(bigMod1(n,DUCK_CONST.duck.wuynh.cu),c); s:=c+s; n:=bigDiv1(n,DUCK_CONST.duck.wuynh.cu); end; exit(s); end; Procedure anhhoangtocnhucailonkhit; Begin Assign(nhac,kha); Reset(nhac); Assign(ke,bruh); Rewrite(ke); End; Procedure anhduckwuynhdeptraikhoaitoso1thegioi; Begin readln(thich); readln(bu); readln(cu); case bu of 'cong': write(cs2(add(thich,cu))); 'tru': write(cs2(sub(thich,cu))); 'nhan': write(cs2(multiply2(thich,cu))); 'chia': write(cs2(bigDiv2(thich,cu))); end; end; Procedure noithatdaydeoduadau; Begin Close(nhac); Close(ke); End; begin anhhoangtocnhucailonkhit; anhduckwuynhdeptraikhoaitoso1thegioi; noithatdaydeoduadau; end.