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.

评论