C++ 使用时出现大数字问题<;iomanip>;cpp中的较大值
在排序和显示大数字时,您通常会在enotation中显示大数字。我试图使用cpp中的C++ 使用时出现大数字问题<;iomanip>;cpp中的较大值,c++,C++,在排序和显示大数字时,您通常会在enotation中显示大数字。我试图使用cpp中的库来显示整数,但对于非常大的数字,显示失败 //big sorting #include<bits/stdc++.h> #include<iomanip> using namespace std; int main() { int n; cin>>n; double arr[n];
库来显示整数,但对于非常大的数字,显示失败
//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;
}
预期产出:
1
3
3
5
10
31415926535897932384626433832795
实际产量:
1
3
3
5
10
31415926535897933290036940242944
最后一个数字被弄乱了。双精度类型的精度只有15个十进制数字,因此非常大的整数不能用双精度类型来表示,而不会损失精度。请阅读更多,可能是C++11标准。
还读取C++编译器的文档,例如(调用<代码> G++<代码>)或(调用<代码> CLAN++<代码>)。当然要读a,因为C++是一种非常难的编程语言。使用C++标准和.< 大的数字本机不适合计算机内存(或其寄存器)。例如,用Linux/X8664编译的C++代码,<代码> int >代码只有32位。
考虑使用。你可能对我感兴趣 浮点数很奇怪。请务必阅读著名的网站,并看到答案#包括
是错误的,因为它是非标准的。养成只包含用户需要的标题的习惯,除非您使用
花些时间阅读更多关于和的信息。有些概念在编程时非常有用:许多计算机都是以232或264模计算的
对现有软件的C++源代码(如ON或OR)进行了研究。如果你使用Linux,它有一个很好的C++代码。您甚至可以浏览内部和/或的源代码,这两个都是优秀的C++开源编译器。
在实践中,还要阅读一些工具,如(用C编写的)或(用C++编写的开源)
不要忘记使用系统(我推荐)
阅读
编译C++代码时启用所有警告和调试信息(使用<代码> G++-Walth-WOTU-G<代码> > 当然,请阅读您最喜欢的调试器的文档。 我是一个快乐的用户
考虑使用诸如or之类的工具。你能给我一个解决方案吗?比如我应该使用long-long-int还是其他什么?根据你的意图,有多种可能的解决方案。你需要设定要求,即回答以下问题:(a)你的数字能有多大?(b) 这些数字一定是整数还是其他数字?(c) 如果所有的数字都是整数-它们可以是负数吗?很抱歉,我应该在问题中指定。您的示例中的特定数字
31415926535897932384626433832795
大于64位无符号整数可以容纳的值,因此long
不够。它可以适应128位整数,但如果你考虑更高的数字,它将无济于事。我不确定你的符号是否正确-2*10^5表示20000?还是10万次方的2倍?如果是20000,那么为什么示例中的数字要比这个大得多?@KrishnnaSarrdah n只是数组的大小——首先是这个,double arr[n]代码>无效C++。C++中的数组必须在编译时知道它们的大小,而不是运行时。使用std::vector arr(n)代码>取而代之。其次,如果n
很大,则使用double-arr[n]
可能会耗尽堆栈内存。在声明数组时,不应该使用假C++——它不是有效的C++语法,只能导致比你认为的问题更多的问题。你可能想在建议编译器选项列表中添加<代码> -PoaTiTIC< /COD>标志。如果没有它,编译器将无法在编译时用n
未知声明double arr[n]
问题。
1
3
3
5
10
31415926535897933290036940242944