我已经学习了大约一个月的C ++。我做了一个二进制转换器。但是当我输入一个大数字,例如200000000时,它将返回错误的答案。所以我将所有int
更改为double
并更改了一些代码,但它仍然是错误的。然后我在Google上搜索解决方案,但我什么也没得到。请指出我的错误!谢谢!以下是代码。
(抱歉我的英语不好,这是我第一次在这个网站上提问。如果我弄错了,请指出并原谅我。)
#include <iostream>
#include <cmath>
using namespace std;
int main(){
double m,n,t,x,i=0;
cin>>n;
m=n;
do{
if(fmod(n,2)==0) n/=2;
else n=(n-1)/2;
i++;
}while(n>=1);
for(t=0;t<i;t++){
x+=fmod(m,2)*pow(10,t);
if(fmod(m,2)==0) m/=2;
else m=(m-1)/2;
}
printf("%.f\n",x);
return 0;
}
答案 0 :(得分:3)
您应该将double
更改为unsigned long long
,但由于以下代码,它无法提供帮助。
x+=fmod(m,2)*pow(10,t);
if(fmod(m,2)==0) m/=2;
else m=(m-1)/2;
此代码将m
转换为十进制,以便可以打印。但是由于它以10的幂移动它,它超出了偶数unsigned long long
的范围。
可以通过将x
声明为string
来修复此问题。将fmod
更改为%
。
并且
x+=fmod(m,2)*pow(10,t);
到
x = ((m%2)? "1":"0") + x ;
最后和cout << x << endl;
。祝你好运!