четверг, 15 августа 2013 г.

27. Циклические сдвиги

 prb27Запишем целое десятичное число N в двоичной системе счисления и образуем все левые циклические сдвиги числаN, у которых первая цифра числа переносится в конец.
   Например, если N = 11, то в двоичной системе это 1011, его циклические сдвиги: 0111111011011011. Максимальное значение М у всех полученных таким образом чисел будет иметь число 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.

*****

Комментариев нет:

Отправить комментарий