将十进制转换为二进制的程序不适用于大输出

program to convert decimal to binary is not working for large outputs

我制作了一个将十进制转换为二进制的程序,但它不适用于大输出。我想我无法在我的函数中正确使用 long long int

这是我的代码:

#include<iostream>
using namespace std;

int decimal_to_binary(int n)
{
    int x=1;
    long long int ans=0;
    while (x<=n){
        x*=2;
    }
    x/=2;
    while(x>0)
    {
        int lastdigit=n/x;
        n-=lastdigit*x;
        x/=2;
        ans=ans*10+lastdigit;
    }
    return ans;
}

int main()
{
    int input;
    long long int a;
    cout<<"input = ";
    cin>>input;
    a=decimal_to_binary(input);
    cout<<a;
}

例如, 如果我输入 30,它会给我预期的输出,即 11111.

该程序最多可正确输出 1023 个输入, 但在那之后它给了我意想不到的价值。例如, 如果我输入 1200,则输出为 1420175408。

您正在存储一个十进制数,它是 n 重新解释为十进制的二进制表示形式。

如果n>2047,ans会溢出一个std::int32_t;如果 n>524287,ans 将溢出 std::int64_t(最大有符号 64 位数字为 9223372036854775807;unsigned 将允许 ans 中多一位)。

return 正确的是字符串。试试这个:

std::string decimal_to_binary(int n)
{
    int x=1;
    std::string ans;
    while (x<=n){
        x*=2;
    }
    x/=2;
    while(x>0)
    {
        int lastdigit=n/x;
        n-=lastdigit*x;
        x/=2;
        ans=ans+(char)('0'+lastdigit);
    }
    return ans;
}