正文

pku(1767)(pascal)2005-09-08 04:50:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/ddtme/4507.html

分享到:

Var
   n:longint;
   a:array[1..30]of integer;
   k,i,j,s:integer;
Procedure print;
var
   n1:longint;
   i:integer;
begin
   n1:=0;
   for i:=k to 30 do
     n1:=n1*2+a[i];
   writeln(n1);
   halt;
end;
Begin
   readln(n);
   k:=31;
   while n>0 do
     begin
       dec(k);
       a[k]:=n mod 2;
       n:=n div 2;
     end;
   for i:=30 downto k+1 do
     if (a[i]=1)and(a[i-1]=0) then
       begin
         a[i]:=0;
         a[i-1]:=1;
         s:=0;
         for j:=i+1 to 28 do
           if a[j]=1 then inc(s);
         for j:=28 downto i+1 do
           if odd(j) then a[j]:=0
             else
               if (28-j)div 2<s then
                 a[j]:=1
               else
                 break;
         for s:=i+1 to j do a[s]:=0;
         print;
       end;
   s:=0;
   for i:=28 downto k do
     if odd(i) then a[i]:=0 else a[i]:=1;
   print;
End.

阅读(4580) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册