c++ - 我的二进制转换器有问题

标签 c++

我已经学习 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;
}

最佳答案

你应该改变doubleunsigned 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/

相关文章:

c++ - 获取对源文件中特定函数的所有调用并生成其他文件(使用 C、C++ 预处理器或脚本)

java - 它不会创建 Java VM (JNI)

c++ - 如何在 Linux 上热重载共享库

来自编译器的c++类型错误消息,这是什么意思?

c++ - 在 STL 容器中使用模板类

c++ - 网格三角形上的复杂 OpenMP 并行化

c++ - 是否有帮助组织#includes 的工具?

c++ - C++ DLL程序退出时: Run-Time Check Failure #2

c++ - 如何使用 get line() 从文件中读取间隔字符串?

c++ - 在 C++ DLL 中构造类对象并使其可从 DLL 的任何导出函数中访问的最佳方法是什么?