还是模拟: { Author:wzx961008 Problem:UVa 11933-Splitting Numbers Verdict:Accepted Language:PASCAL Run Time:0.012s Submission Date:2011-03-23 16:35:17 } uses math; var ans1,ans2,len,n,i,num:longint; s,a,b:string; function change_to_binary(a:longint):string; var num:longint; begin change_to_binary:=''; num:=a; repeat if num and 1=0 then change_to_binary:='0'+change_to_binary else change_to_binary:='1'+change_to_binary; num:=num>>1; until num=0; end; begin while true do begin readln(n); if n=0 then break; s:=change_to_binary(n); len:=length(s); num:=0; a:=''; b:=''; for i:=len downto 1 do if s[i]='1' then begin inc(num); if num and 1=1 then begin a:='1'+a; b:='0'+b; end else begin a:='0'+a; b:='1'+b; end; end else begin a:='0'+a; b:='0'+b; end; ans1:=0; ans2:=0; for i:=len downto 1 do begin if a[i]='1' then inc(ans1,trunc(power(2,len-i))); if b[i]='1' then inc(ans2,trunc(power(2,len-i))); end; writeln(ans1,' ',ans2); end; end.