переводим N в двоичную систему счисления
|
Код:
|
Bin := '';
while (N > 0)
do
begin
Bin := Chr (N mod 2 + 48) + Bin;
N := N div 2;
end; |
добавим в двоичное представление ведущие нули
|
Код:
|
for i := 1 to (35 - Length (Bin)) do
Bin := '0' + Bin; |
теперь идем с конца двоичного представления и ищем первую единицу, слева от которой стоит ноль, после чего обменяем их местами, а все единицы, что остались справа запишем в конец числа
примерно так
|
Код:
|
for i := Length (Bin) downto 1 do
if (Bin [i] = '1')
and
(Bin [i - 1] = '0')
then
begin
Bin [i - 1] := '1';
Bin [i] := '0';
t := i;
break;
end; |
потом сортируем оставшуются часть числа по неубыванию
|
Код:
|
for i := t to (Length (Bin) - 1) do
for j := t to (Length (Bin) - i) do
if (Bin [j] > Bin [j + 1])
then
begin
Bin [j] := '0';
Bin [j + 1] := '1';
end; |
теперь переведем результат в десятичную систему счисления и прибавляем последнюю цифру двоичного разряда
|
Код:
|
for i := 1 to (Length (Bin) - 1) do
if (Bin [i] <> '0')
then
Inc (N, Pow (2, Length (Bin) - i));
Inc (N, Ord (Bin [Length (Bin)]) - 48); |