#c #recursion #dynamic-programming #procedural-programming #number-systems
#c #рекурсия #динамическое программирование #процедурное программирование #системы счисления
Вопрос:
У меня был этот код. С кодом все в порядке. Единственное, я не понимаю, почему мы умножаем на 10 в последней второй строке , когда функция convert() вызывается рекурсивно.
#include<stdio.h>
int convert(int);
int main()
{
int dec,bin;
printf("n Enter the decimal no.:");
scanf("%d",amp;dec);
bin=convert(dec);
printf("n The binary equivalent is %d",bin);
return 0;
}
int convert(int dec)
{
if(dec==0)
return 0;
else
return ((dec%2) 10 * convert(dec/2));
}
Кто-нибудь, помогите мне. Заранее спасибо.
Комментарии:
1. Код не очень полезен, притворяясь, что десятичное число является двоичным. 32-разрядное
int
число не может быть преобразовано таким образом, поскольку 10 ^ 32 находится вне диапазона 32-разрядного целого числа. Он может разумно преобразовать толькоchar
тип. Лучше преобразовать в строку. Кстати, в последней второй строке нет «умножения на 10». Есть ли опечатка, заменяющаяна
*
?
Ответ №1:
Вы, кажется, не понимаете, что происходит:
представьте, что вы преобразуете число 9 в двоичные цифры, тогда вы должны получить «1001», которым вы и являетесь (используя свою программу).
Однако «1001» (один ноль ноль один) отображается как 1001 (тысяча и один).
О, может быть, вы не понимаете, что умножение на десять и добавление чего-либо — это способ добавить что-то в конце: если я попрошу вас добавить цифру 2 к цифре 3, вы сделаете следующее:
3 * 10 2 = 32
Вы делаете то же самое здесь (но цифры «притворяются» двоичными цифрами).