我已经学习 C++ 大约一个月了。我做了一个二进制转换器。但是当我输入一个很大的数字时,比如200000000,它会返回一个错误的答案。所以我把所有的int
都改成double
,改了一些代码,还是不对。然后我在谷歌上搜索解决方案,但一无所获。请指出我的错误!谢谢!下面是代码。
(对不起,我的英语不好,这是我第一次在这个网站上提问。如果我有什么不对的地方,请指出并原谅我。)
#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;
}
最佳答案
你应该改变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;
在最后。祝你好运!
关于c++ - 我的二进制转换器有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33439408/