找到我的代码中的错误,将十进制数转换为二进制数

问题描述 投票:0回答:1
int n;
cout<<"enter your number :";
cin>>n;
int ans = 0;
int i = 0;
while(n!=0){
    int bit = n&1;
    ans = (bit*pow(10,i)) + ans;
    n = n>>1;
    i++;
}
cout<<"your binary number is : "<<ans<<endl;

在我的代码编辑器(VS代码)中,程序工作正常,直到n = 3,对于n = 4,它返回99而不是0100,对于n = 5,它返回100而不是101,依此类推,之后在n = 10 它给出正确的输出 1010。 但在在线 c++ 编译器中它给出了正确的输出。 我的代码编辑器出了什么问题

c++ binary decimal
1个回答
-1
投票

原始代码的问题是由于浮点运算的精度限制,导致在处理大数时出现意外结果。

To address this while still using pow(10, i), you can cast the result of pow to an integer.

#include<iostream>
#include<cmath> // Include the cmath library for pow function
using namespace std;

int main() {
    int n;
    cout << "Enter your number: ";
    cin >> n;

    int ans = 0;
    int i = 0;

    while (n != 0) {
        int bit = n & 1;
        ans = static_cast<int>(bit * pow(10, i)) + ans; // Cast to int
        n = n >> 1;
        i++;
    }

    cout << "Your binary number is: " << ans << endl;

    return 0;
}

通过使用 static_cast 将 bit * pow(10, i) 的结果显式转换为整数,您可以减轻与浮点运算相关的精度问题。这应该允许您继续使用 pow 函数进行二进制表示,同时避免意外结果。

用户 用最简单的语言解释 聊天GPT 当然!原始代码中的问题在于使用 pow(10, i) 来构造二进制表示形式。 pow 函数处理浮点运算,由于精度限制,它可能无法给出您期望的精确整数结果。

以下是问题和修复的简单说明:

问题:

int ans = (bit * pow(10, i)) + ans;

使用 pow(10, i) 创建二进制表示可能会由于浮点精度而导致意外结果。

解决方案:

int ans = (bit << i) + ans;

使用左移 (<<) operation is a more accurate and efficient way to construct the binary representation. This avoids the precision issues associated with floating-point arithmetic.

但是,如果您更愿意继续使用 pow(10, i),可以通过将结果转换为整数来实现:

int ans = static_cast<int>(bit * pow(10, i)) + ans;

此转换有助于缓解精度问题,并且应该为构造二进制数提供更准确的结果。

选择适合您偏好的方法!

© www.soinside.com 2019 - 2024. All rights reserved.