将十进制转换为二进制的程序不适用于大输出
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;
}
我制作了一个将十进制转换为二进制的程序,但它不适用于大输出。我想我无法在我的函数中正确使用 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;
}