
Например, если N = 11, то в двоичной системе это 1011, его циклические сдвиги: 0111, 1110, 1101, 1011. Максимальное значение М у всех полученных таким образом чисел будет иметь число 11102 = 1410.
Для заданного числа N определить максимальное значение М.
*****
var st:string;
n, m, temp, i, rez, max:longint;
procedure dec_to_bin (x:longint; var s:string);
var t:integer;
begin
s:='';
while x>0 do
begin
t:=x mod 2;
if t=0 then s:='0'+s
else s:='1'+s;
x:=x div 2;
end;
end;
function bin_to_dec (s:string):longint;
var t, j, r:longint;
begin
t:=1; r:=0;
for j:=length(s) downto 1 do
begin
if s[j]='1' then r:=r+t;
t:=t*2;
end;
bin_to_dec:=r;
end;
begin
readln (n);
dec_to_bin (n, st);
max:=0;
for i:=1 to length(st) do
begin
temp:= bin_to_dec(st);
if temp>max then max:=temp;
st:=copy(st,2, length(st)-1)+st[1];
end;
writeln (max);
end.
n, m, temp, i, rez, max:longint;
procedure dec_to_bin (x:longint; var s:string);
var t:integer;
begin
s:='';
while x>0 do
begin
t:=x mod 2;
if t=0 then s:='0'+s
else s:='1'+s;
x:=x div 2;
end;
end;
function bin_to_dec (s:string):longint;
var t, j, r:longint;
begin
t:=1; r:=0;
for j:=length(s) downto 1 do
begin
if s[j]='1' then r:=r+t;
t:=t*2;
end;
bin_to_dec:=r;
end;
begin
readln (n);
dec_to_bin (n, st);
max:=0;
for i:=1 to length(st) do
begin
temp:= bin_to_dec(st);
if temp>max then max:=temp;
st:=copy(st,2, length(st)-1)+st[1];
end;
writeln (max);
end.
*****
Комментариев нет:
Отправить комментарий