【问题标题】:Decimal to binary conversion C++十进制到二进制转换 C++
【发布时间】:2018-07-21 18:14:36
【问题描述】:

该程序适用于 3 位整数。但是当输入一个 4 位整数时它给出了错误的答案。

convertToBinary(123); // returns 1111011 (correct) 
convertToBinary(2345); // returns 1313853193 (incorrect)

这是将十进制转换为二进制的函数:

int convertToBinary(int x){
int remainder;
int i=1;
int total=0;

while(x!=0){
    remainder = x%2;
    x /= 2;
    total += remainder*i;
    i *= 10;
}
return total;
}

【问题讨论】:

  • 我建议您在调试器中逐行执行代码。
  • 吹毛求疵:您并没有真正转换为二进制,而是转换为十进制表示仅包含 1 和 0 的数字。例如,convertToBinary(3) 将返回 11 个,而不是 3 个。
  • @molbdnilo 答案是 11。顺便说一句,二进制数只用 1 和 0 表示。
  • @user3834119 仅包含 1 和 0 的数字的十进制(以 10 为底)表示不是二进制的。

标签: c++ binary int decimal


【解决方案1】:

这是因为您遇到了溢出:234510 是 1001001010012,超出了您用于存储 @ 的 32 位 int 的限制987654322@.

您可以通过将unsigned long long 用于您的total 来稍微改进范围,但一些较大的数字仍会触发溢出错误。更好的方法是使用std::string 作为转换结果。

【讨论】:

  • 一件事是int 不保证是32位的。
  • @EricZ 技术上是正确的,但没有一个现代和通用的平台有一个不是 32 位的 int
  • @JoachimPileborg 这当然不是很常见,但至少有一个“现代”平台有 48 位整数。 (在今天仍在销售的意义上是现代的。实际的架构可以追溯到 1960 年代初期,或者可能更早。)
  • 位集也可能是使用 int 的合适替代方案,具体取决于应用程序。
【解决方案2】:

我遇到了同样的问题,使用字符串帮助了它。 以下是代码:

string Solution::findDigitsInBinary(int A) {
    std::string r;
    if(A == 0) return "0";
    else if(A == 1) return "1";
    else
    {
    while(A!=0) {r=(A%2==0 ?"0":"1")+r; A/=2;}
    }
    return r;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-14
    • 2023-04-11
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    相关资源
    最近更新 更多