求10000以内n的阶乘

求10000以内n的阶乘

求10000以内n的阶乘。

输入

只有一行输入,整数n(0<=n<=10000)。

输出

一行,即n!的值。

样例输入

100

样例输出

93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

Code

#include<cstdio>
const int n=10005;
const int m=100000;//把结果分段,每段五位
int s[n]={1,1},x,i,j,len=1;
int main()
{
    scanf("%d",&x);
    for(i=2;i<=x;i++)//因为1乘任何数都是它本身,所以从2开始节约时间
    {
        for(j=1;j<=len;j++)//开始乘
            s[j]*=i;
        for(j=1;j<=len;j++)//处理进位
        {
            s[j+1]+=s[j]/m;  
            s[j]%=m;
        }
        len++;//自加
        while(s[len])//当s[len]!=0时
        {
            s[len+1]=s[len]/m;
            s[len]%=m;
            len++;
        }//处理进位后的进位
    }
    while(len>1&&s[len]==0)
        len--;
        printf("%d",s[len]);
    for(i=len-1;i>=1;i--)
        printf("%05d",s[i]);//因为是五位一段,所以用%05d
}

猜你喜欢

转载自blog.csdn.net/qq_38956769/article/details/79483581