Param46. Описать функцию BinToDec($$S$$) целого типа, определяющую целое неотрицательное число по его строковому представлению $$S$$ в двоичной системе счисления. Параметр $$S$$ имеет строковый тип, состоит из символов «0»-«1» и не содержит ведущих нулей (за исключением значения «0»). Используя эту функцию, вывести пять чисел, для которых даны их двоичные представления.
Решение с возведением в степень, через ln и Exp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
program Param46; type St=String; var i:integer; S:St; function BinToDec(S:St):integer; var NumS: String; begin NumS:='01'; result:=0; for i:=1 to length(S) do result:=result+(pos(S[i],NumS)-1)*round(Exp((length(S)-i)*Ln(2))); end; begin for i:=1 to 5 do begin Write('S: '); readln(S); writeln(BinToDec(S)); end; end. |
Решение, получение степени двойки через побитовый сдвиг:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
program Param46; type St=String; var i:integer; S:St; function BinToDec(S:St):integer; var NumS: String; begin NumS:='01'; result:=0; for i:=1 to length(S) do result:=result+(pos(S[i],NumS)-1)* (1 Shl (length(S)-i)); end; begin for i:=1 to 5 do begin Write('S: '); readln(S); writeln(BinToDec(S)); end; end. |
Другие задачи из раздела Param можно посмотреть здесь.
Комментарии: