具有递归函数的二进制转换给出奇数值

时间:2017-10-27 15:52:48

标签: c++ recursion

我正在创建一个使用递归函数将数字转换为bianry的函数,但是当我写出大值时,它给我一个奇数值,例如,当我写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;
}

1 个答案:

答案 0 :(得分:4)

C ++中的整数值只能存储有界范围内的值(通常为-2 31 至+2 31 - 1),最大值约为20亿并且更改。这意味着如果您尝试在整数中存储一个超过十位的二进制值,您将超出此上限。在大多数系统中,这会导致值环绕,因此负输出。

要解决这个问题,我建议让你的函数返回std::string存储位而不是整数,因为从逻辑上讲,你返回的数字实际上不是你输入的10的整数。我喜欢做进一步的算术运算。这将允许您生成所需长度的二进制序列,而不会有整数溢出的风险。

至少你的逻辑是正确的!