首页 > 解决方案 > 使用时遇到大数问题cpp 较大

问题描述

在排序和显示大数字时,您通常最终会以表示形式显示大数字。我试图通过使用 cpp 中的库来显示整数<iomanip>,但对于非常大的数字它会失败。

 //big sorting
    #include<bits/stdc++.h>
    #include<iomanip>
    using namespace std;
    int main()
    {
        int n;
        cin>>n;
        double arr[n];
        for (int i = 0;i < n; i++)
            cin>>arr[i];

        sort(arr, arr+n);
        cout<<fixed<<setprecision(0);
        for (int i = 0;i < n; i++)
            cout<<arr[i]<<endl; 
    }

输入:

31415926535897932384626433832795
1
3
10
3
5

预期输出:

1
3
3
5
10
31415926535897932384626433832795

实际输出:

1
3
3
5
10
31415926535897933290036940242944

最后一位数字变乱了。

标签: c++

解决方案


阅读有关 C++的更多信息,也许是 C++11 标准n3337

另请阅读 C++ 编译器的文档,例如GCC(调用为g++)或Clang(调用为clang++)。当然要阅读一本好的 C++ 编程书籍,因为C++是一种非常难的编程语言。使用 C++ 标准容器智能指针

大数本身不适合计算机内存(或其寄存器)。例如,使用GCC在 Linux/x86-64 上编译的 C++ 代码,anint只有 32 位。

考虑使用任意精度算术。您可能对GMPlib感兴趣。

浮点数很奇怪。请务必阅读著名的floating-point-gui.de网站,并查看答案。

#include<bits/stdc++.h>

是错误的,因为非标准。养成#include只使用翻译单元需要的标头的习惯,除非您使用预编译的标头

花一些时间阅读有关数字算术的更多信息。一些模运算的概念在编程时非常有用:很多计算机都在计算模 2 32或 2 64

研究现有开源软件的 C++ 源代码(例如在githubgitlab上,包括FLTK)以获得灵感。如果你使用 Linux,它的fish-shell有一个很好的 C++ 代码。您甚至可以浏览GCCClang的源代码,它们都是不错的 C++ 开源编译器。

在实践中,还请阅读有关构建自动化工具的信息,例如GNU make(用 C 编码的自由软件)或ninja (用 C++ 编码的开源工具)。

不要忘记使用版本控制系统(我推荐git)。

阅读如何调试小程序

编译 C++ 代码时启用所有警告和调试信息(使用 GCC,使用 g++ -Wall -Wextra -g)。

当然,请阅读您最喜欢的调试器的文档。

我是GDB的快乐用户。

考虑使用静态程序分析工具,例如Clang 静态分析器Frama-C++


推荐阅读