C++ 我怎么能找到100!准确地说?[编程挑战]

C++ 我怎么能找到100!准确地说?[编程挑战],c++,factorial,C++,Factorial,我尝试使用double,但它会给我3.2e+12这样的科学答案。我需要正确的答案。我该怎么做 到目前为止,我的代码是: int n, x; double fact; cin>>n; while(n--) { fact=1; cin>>x; for(;x>1;x--) fact*=x; cout<<fact<<end

我尝试使用double,但它会给我3.2e+12这样的科学答案。我需要正确的答案。我该怎么做

到目前为止,我的代码是:

    int n, x;
    double fact;
    cin>>n;

    while(n--)
    {
        fact=1;
        cin>>x;
        for(;x>1;x--)
            fact*=x;
        cout<<fact<<endl;
    }
intn,x;
双重事实;
cin>>n;
而(n--)
{
事实=1;
cin>>x;
对于(;x>1;x--)
事实*=x;

cout
double
是一种固定大小的类型,通常为64位,精度为53位;因此它不能准确表示任何超过16位的整数。最大的标准整数类型通常为64位,最多可表示19位的整数。100!比这大得多,因此不能用ny内置型


您需要一个大整数类型,将一个数字表示为一个较小的数字数组。没有标准类型;您可以使用像or这样的库,因为这是一个编程难题,请自己实现它。要计算阶乘,您需要实现乘法;最简单的方法是使用“长乘法”你在学校学过的算法。

首先,使用浮点格式,如double和float,总是会引入舍入误差,如果你想用大数字来减少误差,可以使用long或long-long,但是它们不能表示像double或long-double那样大的值(请注意,不同编译器对long-long和long-double的行为和支持各不相同)。您可能希望研究bigint或bigdoull之类的bignum,尽管您会牺牲preformace

这就是说,这个问题也可能是设置格式的问题之一:数字足够大,可以用科学记数法输出,您可以使用

cout<<std::fixed;

cout到目前为止,没有数据类型可以存储(100!)这样大的数字。
你应该完成一些类似BigIntenger类的运算来计算100!;

通常,如此大的数字可以通过字符串存储。

首先,使用正确的格式更改输出格式。是的,很抱歉,我差点忘了添加代码。正如您所看到的,这非常简单……我认为答案会非常复杂。我显然不需要任何人对其进行编码。只是一个提示或关于如何操作的提示。谢谢:使用bignums。您需要一个处理非常长的数字的整数库。另一个可能的重复:科学答案不是正确的答案?