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



我制作了一个将十进制转换为二进制的程序,但它不适用于大输出。我认为我不能在我的功能中正确使用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中多1位。

正确的返回值是字符串。试试这个:

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;
}

最新更新