求10000以内n的阶乘 OpenJ_Bailian - 2731

求10000以内n的阶乘。

Input

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

Output

一行,即n!的值。

Sample Input

100

Sample Output

93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[100000010];
char c [60];
int main()
{
//从1乘到n
    int i,len,n;
    scanf("%d",&n);
    a[1]=1;
    len=1;
    for(int k=2; k<=n; k++)
    {
        for(i=1; i<=len; i++)
        {
            a[i]=a[i]*k;
        }
        for(i=1; i<=len; i++)
        {
            if(a[i]>=10)
            {
                a[i+1]+=a[i]/10;
                a[i]%=10;
            }
        }
        while(a[len+1]>0)
        {
            len++;
            a[len+1]=a[len]/10;
            a[len]=a[len]%10;
        }
    }
    for(i=len; i>=1; i--)
        printf("%d",a[i]);

}

猜你喜欢

转载自blog.csdn.net/chen_zan_yu_/article/details/84480025