将十进制数转换为二进制数的过程如下:
递归地将十进制数除以 2,每次记下余数(0 或 1)。
例如,要将 710 (base10) 转换为其等效的二进制:
预期输出:
710 / 2 = 355, remainder 0
355 / 2 = 177, remainder 1
177 / 2 = 88, remainder 1
88 / 2 = 44, remainder 0
44 / 2 = 22, remainder 0
22 / 2 = 11, remainder 0
11 / 2 = 5, remainder 1
5 / 2 = 2, remainder 1
2 / 2 = 1, remainder 0
1 / 2 = 0, remainder 1
710 (base10) = 1011000110 (base2)
将余数放在一起(以相反的顺序)得到 71010 (base10) = 1011000110 (base2)
编写一个递归程序,将十进制数转换为其等效的二进制数。
不起作用的示例代码:
#include <stdio.h>
/*int convertToBinary() {
};
void printBinary() {
}*/
int main() {
int base10 = 710;
int base2;
int remainder;
do {
printf("%d / 2 = %d, remainder: %d\n", base10, base2, remainder);
remainder = base10 % 2;
base10 = base10 / 2;
base2 = base10;
} while (base10 > 0);
return 0;
}
错误的输出:
710 / 2 = 32766, remainder: -333235520
355 / 2 = 355, remainder: 0
177 / 2 = 177, remainder: 1
88 / 2 = 88, remainder: 1
44 / 2 = 44, remainder: 0
22 / 2 = 22, remainder: 0
11 / 2 = 11, remainder: 0
5 / 2 = 5, remainder: 1
2 / 2 = 2, remainder: 1
1 / 2 = 1, remainder: 0
下面是基本实现:
int toBinary(int x) {
// base case
if(x==0 || x==1)
return x;
printf("%d", toBinary(x/2));
return x%2;
}
int main(){
int num=710;
printf("%d", toBinary(num));
}
如果您只想打印该行:
void printBinary(int num) {
printf("%d (base 10) = ", num);
int lastBit = toBinary(num);
printf("%d (base 2)", lastBit);
}
旁注:recursive
函数是调用自身的函数。您的示例是一个简单的基于循环的程序,而不是递归程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句