高精+简单模拟,一次AC: { Author:wzx961008 Problem:UVa 10018-Reverse and Add Verdict:Accepted Language:PASCAL Run Time:0.828s Submission Date:2011-01-14 02:48:35 } var n,i,tot:longint; s:string; function Reverse(s:ansistring):ansistring; var i:longint; begin Reverse:=''; for i:=1 to length(s) do Reverse:=s[i]+Reverse; end; function Plus(s1,s2:ansistring):ansistring; var a,b,c:array[1..10000]of integer; lena,lenb,lenc,i,x:longint; begin Plus:=''; fillchar(a,sizeof(a),0); fillchar(b,sizeof(b),0); fillchar(c,sizeof(c),0); lena:=length(s1); lenb:=length(s2); for i:=1 to lena do a[lena-i+1]:=ord(s1[i])-ord('0'); for i:=1 to lenb do b[lenb-i+1]:=ord(s2[i])-ord('0'); i:=1; x:=0; while (i<=lena)or(i<=lenb) do begin x:=a[i]+b[i]+x div 10; c[i]:=x mod 10; inc(i) end; if x>=10 then begin lenc:=i; c[i]:=1 end else lenc:=i-1; for i:=lenc downto 1 do Plus:=Plus+chr(c[i]+48); end; begin readln(n); for i:=1 to n do begin readln(s); tot:=0; while true do if s=Reverse(s) then begin writeln(tot,' ',s); break end else begin s:=Plus(s,Reverse(s)); inc(tot); end; end; end.