Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
可以不用写递归啊,但代码较长。。不知道大家的思想和我的一不一样var s:string[9]; shu:array[1..9] of longint; opera,operb:array[0..9] of longint; a,b,len,i,j,temp1,temp2,right,left:longint; procedure work1; var i,j,st:longint; begin temp1:=1; temp2:=10; for i:=1 to len do begin right:=a mod temp1; left:=a div temp2; if i<>1 then begin if left-1>0 then inc(opera[0],(left-1)*temp1); for j:=1 to 9 do inc(opera[j],left*temp1); end else for j:=0 to 9 do inc(opera[j],left*temp1); st:=0; if (i=len) and (len<>1) then inc(st); for j:=st to shu[i]-1 do inc(opera[j],temp1); inc(opera[shu[i]],right+1); temp1:=temp1*10; temp2:=temp2*10; end; end; procedure work2; var i,j,st:longint; begin temp1:=1; temp2:=10; for i:=1 to len do begin right:=b mod temp1; left:=b div temp2; st:=0; if (i=len) and (len<>1) then inc(st); if i<>1 then begin if left-1>0 then inc(operb[0],(left-1)*temp1); for j:=1 to 9 do inc(operb[j],left*temp1); end else for j:=0 to 9 do inc(operb[j],left*temp1); for j:=st to shu[i]-1 do inc(operb[j],temp1); inc(operb[shu[i]],right+1); temp1:=temp1*10; temp2:=temp2*10; end; end; begin readln(a,b); while (a<>0) or (b<>0) do begin if a>b then begin if b<>0 then dec(b); end else begin if a<>0 then dec(a); end; fillchar(opera,sizeof(opera),0); str(a,s); len:=length(s); for i:=1 to len do shu[i]:=ord(s[len-i+1])-ord('0'); work1; fillchar(operb,sizeof(operb),0); str(b,s); len:=length(s); for i:=1 to len do shu[i]:=ord(s[len-i+1])-ord('0'); work2; for i:=0 to 8 do write(abs(opera[i]-operb[i]),' '); writeln(abs(opera[9]-operb[9])); readln(a,b); end; end. Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator