簡體   English   中英

嘗試使用c中的遞歸將十進制轉換為二進制轉換器

[英]trying to make decimal to binary converter using recursion in c

我需要用遞歸在 c 中制作一個十進制到二進制轉換器,但輸出是錯誤的,例如十進制 = 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));



}

我需要更改哪一部分提前謝謝

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

如果a == 0 OP 的代碼會無限遞歸。 僅在a >= 1遞歸。 (左邊有一個二進制數字。)

d為 0 或 1,要打印的二進制數字可以使用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');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM