我正在制作一个使用递归函数将数字转换为二进制的函数,尽管当我写大值时,它会给我一个奇数,例如,当我写 2000 时,它会给我结果 -1773891888。当我使用调试器跟踪该函数时,直到最后一秒它都会以二进制形式给出正确的 2000 值。 谢谢!!
#include <iostream>
int Binary(int n);
int main() {
int n;
std::cin >> n;
std::cout << n << " = " << Binary(n) << std::endl;
}
int Binary(int n) {
if (n == 0)return 0;
if (n == 1)return 1;
return Binary(n / 2)*10 + n % 2;
}
最佳答案
C++ 中的整数值只能存储有界范围内的值(通常是 -231 到 +231 - 1),最大值约为 20 亿,并且会发生变化.这意味着,如果您尝试在整数中存储超过十位的二进制值,就会超出此上限。在大多数系统上,这会导致值回绕,从而产生负输出。
为了解决这个问题,我建议让你的函数返回一个 std::string
来存储位而不是一个整数,因为从逻辑上讲你返回的数字并不是一个基数-10 您想对其进行进一步算术运算的整数。这将使您能够生成任意长度的二进制序列,而不会冒整数溢出的风险。
至少你的逻辑是对的!
关于c++ - 具有递归函数的二进制转换给出奇数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46979020/