【发布时间】:2021-11-29 08:54:27
【问题描述】:
我编写了一个程序将十进制转换为二进制,但它不适用于大输出。我认为我无法在我的函数中正确使用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。
【问题讨论】:
-
我可以说,当你的函数说它将返回一个
int时,将结果存储在long long中没有任何意义。 -
我也很好奇你为什么要返回一个整数类型。它可能看起来像二进制文件,但实际上不是。
-
但它不适用于大输出 -- 给我们一个你正在使用的输入样本。
-
您将无法在
long long int变量中存储大数的二进制等价物。您需要使用整数数组或字符串。 -
十进制到二进制的转换是一个 I/O 函数,而不是你应该将一个整数值映射到另一个整数值(即不是你在做什么)。您正在执行的映射会将
1映射到1、2到10、3到11、4到100、5到@98765436@9876、@98765436@5 @ 到110、7到111、8到1000、16到10000。请注意,即使是很小的值,输出值也大大大于输入,并且增长得更快(实际上是指数级的)。而且由于long long拥有有限范围的值.....
标签: c++ binary decimal long-integer