【发布时间】:2018-08-10 06:29:36
【问题描述】:
我有一种递归方法可以在 C 中将十进制数转换为二进制数
long decimalToBinary(long n)
{
if(n == 0) {
return 0;
}
else {
return (10*decimalToBinary(n/2))+(n%2);
}
}
它正在打印出正确的输出,但如果它不能被 4 整除,我会尝试将它放在前导零和二进制数之前,并将其以4 的组打印出来。 (例如100101100 -> 0001 0010 1100)
我在考虑使用数组,而不是像现在这样返回答案,而是将其放入数组中并在 main() 方法中对其进行修改。然后我可以在开头添加一个空格并添加零。
有没有更好的方法来做到这一点?
【问题讨论】:
-
有 - 使用
char数组。好吧,您提到了它,您无法直接使用某些标准函数将其转换为二进制。 -
感谢@coderredoc。我在使用数组时遇到的问题是我不知道我将拥有多大的数字。这是一个随机输入。我如何制作一个没有预定大小的数组?
-
这个问题有一个众所周知的解决方案 - 在开始时动态分配内存,以便它可以容纳最大位数(根据您的应用程序的需要),然后以防进一步需要扩展或缩小重新分配.我想说的不止是 100 个元素
char就足够了。 -
"我不知道我会有多大的数字" --> 可以使用类似
ceil(log(LONG_MAX)/log(2)) -
获取tour、阅读How to Ask和minimal reproducible example。您显示的代码不打印任何内容。您的
decimalToBinary函数接受一个二进制数并返回一个二进制数。int binary=10; // decimal to binary!。您的代码将数字 10 十进制 (0x0a b1010) 转换为 1010 十进制(0x03f2 或 b1111110010),您的调试器可能正在为您将其转换为十进制,但这通常是可配置的。橡胶符合您实际编写代码以将二进制值转换为 1 和 0 的字符串的道路,并包括漂亮的东西,如前导 'b'、半字节组和零填充。
标签: c recursion binary formatting decimal