Перевод с двоичной системы счисления, в десятичную рекурсией - PascalABC.NET
Формулировка задачи:
Доброго времени суток, натолкните на идею, нужно написать рекурсивную программу которая переводит из двоичной системы счисления в десятичную.
Мои мысли по решению: разбить число на цифры, а за тем рекурсией умножать их на пример:
1101 = 1*20+0*21+1*22+1*23.
Но я попал в тупик, после того как преобразовал число в цифры, я не знаю что с ними дальше делать.
Спасибо!
Листинг программы
- program binToDec;
- VAR n:integer;
- function ToArr(n:integer):integer;
- VAR
- strLen, i : integer;
- nConv : string;
- digit : array [1..255] of integer;
- begin
- nConv := IntToStr(n);
- strLen := length(nConv);
- for i:=1 to strLen
- do begin
- digit[i] := n mod 10;
- n := n div 10;
- end;
- end;
- begin
- Write('Введите двоичное число: ');
- Read(n);
- ToArr(n);
- end.
Решение задачи: «Перевод с двоичной системы счисления, в десятичную рекурсией»
textual
Листинг программы
- function ToDec(n: string): longint;
- begin
- if length(n) = 0 then ToDec := 0
- else
- ToDec := ToDec(LeftStr(n, length(n) - 1)) * 2 +
- Ord(n[length(n)] = '1');
- end;
- var
- bin: string;
- begin
- readln(bin);
- writeln(ToDec(bin))
- end.
Объяснение кода листинга программы
- Входные данные: строка
bin
, представляющая двоичное число. - Функция
ToDec
принимает строку, представляющую двоичное число, и возвращает десятичное число. - Если длина строки равна 0, то возвращается 0.
- В противном случае, функция рекурсивно вызывается для LeftStr(n, length(n) — 1), умножая результат на 2 и добавляя значение Ord(n[length(n)]), которое равно 1, если n[length(n)] равно '1', иначе 0.
- В основной программе вводится двоичное число, затем вызывается функция ToDec, передавая в неё это число, и результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д