我的二进制转换器有问题

时间:2015-10-30 15:22:16

标签: c++

我已经学习了大约一个月的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;
}

1 个答案:

答案 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;。祝你好运!