[英]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.