Преобразовать десятичное число в двоичное с помощью рекурсии в C

#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
  

Вы делаете то же самое здесь (но цифры «притворяются» двоичными цифрами).