c++ - 使用时遇到大数问题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++11 标准n3337。
另请阅读 C++ 编译器的文档,例如GCC(调用为g++
)或Clang(调用为clang++
)。当然要阅读一本好的 C++ 编程书籍,因为C++是一种非常难的编程语言。使用 C++ 标准容器和智能指针。
大数本身不适合计算机内存(或其寄存器)。例如,使用GCC在 Linux/x86-64 上编译的 C++ 代码,anint
只有 32 位。
浮点数很奇怪。请务必阅读著名的floating-point-gui.de网站,并查看此答案。
#include<bits/stdc++.h>
是错误的,因为非标准。养成#include
只使用翻译单元需要的标头的习惯,除非您使用预编译的标头。
花一些时间阅读有关数字和算术的更多信息。一些模运算的概念在编程时非常有用:很多计算机都在计算模 2 32或 2 64。
研究现有开源软件的 C++ 源代码(例如在github或gitlab上,包括FLTK)以获得灵感。如果你使用 Linux,它的fish-shell有一个很好的 C++ 代码。您甚至可以浏览GCC和Clang的源代码,它们都是不错的 C++ 开源编译器。
在实践中,还请阅读有关构建自动化工具的信息,例如GNU make(用 C 编码的自由软件)或ninja (用 C++ 编码的开源工具)。
阅读如何调试小程序。
编译 C++ 代码时启用所有警告和调试信息(使用 GCC,使用 g++ -Wall -Wextra -g
)。
当然,请阅读您最喜欢的调试器的文档。
我是GDB的快乐用户。
考虑使用静态程序分析工具,例如Clang 静态分析器或Frama-C++。
推荐阅读
- c - 数组中素数的总和
- react-native - undefined 不是对象(评估 'this.props.navigation.navigate) React Native 模块
- flask - Flask 下载有时无法在 Firefox 中启动
- c# - WPF Grid 内容未显示在 Expander 中
- javascript - ExecJS:RuntimeUnavailable:找不到 Javascript 运行时 Docker 应用程序
- angular - PrimeNg p-table 列在分组中调整大小不起作用
- android-studio - 通过 SDK 管理器下载有效,但通过 gradle 添加依赖项在 android studio 中失败
- ios - 我可以同时使用 Google Places API(自动完成)和 Mapkit 吗?
- c# - 如何在 C# 中将一个整数除以一个整数并拥有一个具有一个或多个小数位的变量?
- python-3.x - 构建基于特征的语法时,为什么会出现“无效语法”错误?