c++ - 具有递归函数的二进制转换给出奇数

标签 c++ recursion

我正在制作一个使用递归函数将数字转换为二进制的函数,尽管当我写大值时,它会给我一个奇数,例如,当我写 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/

相关文章:

c++ - 运算符++ 中的 Int 参数

C 递归函数不会返回 true

java - 获取所有子文件夹的列表

javascript - 如何使用非递归堆栈编写递归函数?

java - 通过递归向 ArrayList 添加值是否会删除每个添加的新值的列表?

c++ - Spirit X3 : attribute of alternative parser, 不是 `char` ,而是 `variant<char, char>`

c++ - 带有 CMake 和嵌入式目标的 clang-tidy

c++ 模板类成员函数的部分特化

c++ - 有没有办法正确比较 1 个浮点值是否大于/小于另一个?

java - 在类似图形的对象中查找循环