簡體   English   中英

使用遞歸函數將十進制轉換為二進制

[英]decimal to binary conversion using recursive functions

我有一個任務將數字從十進制轉換為二進制。 我的問題是我需要直接從函數中打印出來,而不是將它返回給 main。 因此,我打印的代碼順序錯誤。 (例如:對於 6,我的代碼打印出011而不是110

這是我一直用於該功能的內容:

int printBinary(int integer) {
    int remainder;

    if (integer < 1) {
        return 0;
    } else {
        remainder = integer % 2;
        printf("%d", remainder);
        integer = integer / 2;
        printBinary(integer);
        return 0;
    }
}

有沒有人對我如何反向打印它或完全不同的方法有什么建議?

您應該在打印高階位的遞歸調用之后打印數字。

另請注意,您的函數不會為0打印任何內容,這可能是不正確的。

這是一個簡化版本:

int printBinary(int integer) {
    if (integer > 1)
        printBinary(integer / 2);
    printf("%d", integer % 2);
    return 0;
}

您的函數從尾部開始打印二進制數字。 只需更改遞歸調用和 printf 的順序即可。

int printBinary(int integer)  {

    int remainder;
    if (integer < 1)  {
    return 0;
    }
    else  {
        printBinary(integer / 2);
        remainder = integer % 2;
        printf("%d", remainder);
    return 0;
    }
}

它是

printBinary(6);
printf("%d", 0);
printBinary(3);
printf("%d", 1);
printBinary(1);
printf("%d", 1);
printBinary(0);

就是現在

printBinary(6);
printBinary(3);
printBinary(1);
printBinary(0);
printf("%d", 1);
printf("%d", 1);
printf("%d", 0);

你也可以嘗試這樣的事情

#include <stdio.h>
#include <limits.h>

void printBinary(int num) {
  int i;

  // findind the first non 0 binary position from MSB
  for (i = sizeof(int) * CHAR_BIT - 1; i >= 0 && (num & (1 << i)) == 0; i--);

  for (; i >= 0; i--) // start the printing from here, so trailing 0's avoided
    if ((num & (1 << i)) == 0)
      printf("0");
    else
      printf("1");
}

int main() 
{
    printBinary(6);
    return 0;
}

暫無
暫無

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

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