什么数据类型可以存储100的阶乘?

What data type can store a factorial of 100

本文关键字:阶乘 存储 数据类型 什么      更新时间:2023-10-16

为什么下面的程序将100的阶乘打印为0作为输入?如果getFact函数返回类型为long double,则可以计算相同的阶乘,但要获得数字之和,我不能在长双精度上应用mod (%)操作符。

注意: unsigned long longlong double的大小在我的机器上是相同的。请建议输入为100,什么类型的数据会给出正确的输出。

#include <iostream>
#include <stdlib.h>
unsigned long long int getFactorial(int);
unsigned long long int getSum(unsigned long long int);
int main()
{
    unsigned long long int fact = 1;
    unsigned long long int digsum  = 0;
    std::cout << "Enter a number to find fact := ";
    int num;
    std::cin >> num;
    fact = getFactorial(num);
    std::cout << num <<"'s factorial is = " << fact << std::endl;
    digsum = getSum(fact);
    std::cout << sizeof(unsigned long long int) << std::endl;
    std::cout << sizeof(long double) << std:: endl;
    std::cout << "Sum of the digits in the number" << num << "! is :=" <<  digsum << std::endl;
    return 0;
}
unsigned long long int getFactorial(int num)
{
    if(num == 1)
        return 1;
    else
        return (num * getFactorial(num - 1));
}

unsigned long long int getSum(unsigned long long int fact)
{
    if(fact == 0)
        return 0;
    else
    {
        int temp = 0;
        temp = fact % 10;
        return (temp + getSum(fact/10));
    }
}

如果你想要一个近似值,你可以使用double。(注意整数算术与双精度算术不同)。您可以使用log计算或乘法来估计100!

但是因为你想要数字的和,你需要精确的结果,你需要一些大的整数库。你可以谷歌大整数

或者你可以把大的数字存储成字符串,然后像我们在学校里学的那样用纸笔来计算(乘积)

使用double代替long long int,就像100!, long long int太短,不能保存结果。

double getFactorial(double num)
{
    if (num <= 1)
        return 1;
    else
        return (num * getFactorial(num - 1));
}

long double我比较了结果和工作良好,直到25,从有错误。

#include <iostream>
#include <iomanip>
using namespace std;
long double factorial(long double n)
{
    if (n<=1)
        return 1;
    else
    {
        return n*factorial(n-1);
    }
}
int main()
{
    long double fact;
    for(long double i=0;i<50;i++)
    {
        fact=factorial(i);
        cout<<i<<"!= "<<setprecision(0)<<fixed<<fact<<endl;;
    }
    return 0;
}