пытаясь сделать десятичный в двоичный преобразователь, используя рекурсию в c - PullRequest
0 голосов
/ 06 марта 2020

и мне нужно сделать десятичный преобразователь в Binery в c с рекурсией, но выход неправильный ex десятичный = 22, правильный двоичный = 10110, выход = 01101

, так что это код, который я придумали

#include <stdio.h>

int biner (int a){


    if (a == 1)
    return 1;

    else if (a % 2 == 1)
    {
    printf ("1");
    return biner (a / 2);
    }


    else
    {
    printf ("0");
    return biner (a / 2);
    }



}


int main () {
    int a;
    printf ("Masukan angka ");
    scanf ("%d", &a);


    printf ("%d", biner (a));



}

какую часть мне нужно изменить заранее спасибо

1 Ответ

1 голос
/ 07 марта 2020

Код вывода OP находится в неправильном порядке, так как необходимо выполнить повторение перед печатью, чтобы сначала напечатать наиболее значимые цифры.

Вместо

printf ("1");   // prints least significant digit
biner (a / 2);  // prints most significant digits

Больше похоже на

biner (a / 2);  // prints most significant digits
printf ("1");   // prints least significant digit

Нет необходимости возвращать значение, пусть biner() может выполнить всю печать.

Поскольку код не пытается напечатать знак , возможно, как хорошо используйте unsigned a.

Код OP повторяется бесконечно, если a == 0. Рекурсировать только если a >= 1. (двоичный файл di git существует слева.)

С d в качестве 0 или 1, двоичный файл di git для печати может использовать putchar('0' + d)

Предлагаемое упрощение:

#include <stdio.h>

void biner(unsigned a) {
  if (a > 1) {   // Do binary digits exist to the left?
    biner(a/2);  // Print them.
  }
  putchar('0' + a%2);  // Now print the least significant digit.
}

int main(void) {
  unsigned a;
  printf("Masukan angka ");
  scanf("%u", &a);

  biner(a);
  putchar('\n');
}
...