阶乘计算。

当我们在编写程序计算阶乘时,数据大小往往会超出long long。此时的n还是一个很小的数,而往往我们在竞赛时,n的范围会很大,上百上千都有可能。所以我们应该自己编写一个程序来计算和存储这个阶乘结果。
下面进入正题,这个阶乘结果往往会是几十位数,几百位数,甚至几千位数。所以我们可以试着用数组来存储这个“大数据”,例如s[0]来存储个位,s[1]存储十位,是s[2]存储百位.......。好,现在知道了这个“大数据”的存储方式,
下面直接上代码
#include<bits/stdc++.h>//万能头文件,基本上包含了c和c++所有的头文件
#define SIZE 10000
using namespace std;
int s[10000];//用来存储这个“大数据”
int main()
{
    int i,j,k,n,jinwei=0;
    cin>>n;//求n的阶乘
    s[0]=1;
    for(i=2;i<=n;i++)
    {
        for(j=0;j<SIZE;j++)
        {
            int a=(s[j]*i+jinwei)%10;//对应每个位数上的数字
            jinwei=(s[j]*i+jinwei)/10;//下一位的进位
            s[j]=a;
        }
    }
    int h;
    for(j=SIZE-1;j>=0;j--)//从数组的尾部开始找,找到第一个不为零的数,这个数就是“大数据”的最大位,记录下标
    {
        if(s[j]!=0)
        {
            h=j;
            break;
        }
    }
    for(j=h;j>=0;j--)//从所记下的数组下标开始输出,一直到数组下标为零,也就是大数据的个位
    {
        cout<<s[j];
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43561302/article/details/105346894