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.
正文
pku(1767)(pascal)2005-09-08 04:50:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/ddtme/4507.html
阅读(4580) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论