Задать вопрос

Самый быстрый алгоритм dec -> bin на Pascal?

Подскажите, пожалуйста, какой самый быстрый алгоритм преобразования числа в двоичное из десятичного можно реализовать на Pascal?



Уже есть варианты:

1. Рекурсия:

function bin(a: integer):integer;<br>
begin<br>
     if a>=2 then<br>
        bin(a div 2);<br>
     write(a mod 2);<br>
end;


2. «Игра» со строками:

while n>0 do begin<br>
  if n mod 2 = 0 then<br>
    s:=s+'0'<br>
  else begin<br>
    s:=s+'1';<br>
    n:=n-1;<br>
  end;<br>
  n:=n div 2;<br>
end;<br>
for i:=length(s) downto 1 do<br>
  write(s[i]);<br>
end;


3. И самое обычное, простое решение задачи:

while a>=1 do<br>
  begin<br>
    i:=i+1;<br>
    b[i]:=a mod 2;<br>
    a:=a div 2;<br>
  end;<br>
n:=i;<br>
for i:=n downto 1 do<br>
write(b[i]);<br>




Потребление памяти не важно, важно время выполнения и возможность перевода чисел типа int64 (-9223372036854775808..9223372036854775807)
  • Вопрос задан
  • 8222 просмотра
Подписаться 5 Оценить 2 комментария
Решения вопроса 1
anmipo
@anmipo
Очевидная оптимизация:
b[i]:=a and 1;
a:=a shr 1;
Хотя компилятор должен и сам догадаться.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Wott
@Wott
ну если потребление памяти таки не важно, то самым быстрым будет таблица :)
Ответ написан
@gribozavr
А где тут десятичные числа? Тут машинные числа, они и так двоичные.
Ответ написан
@YourChief
а бенчмаркнуть все три не пробовали?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы