51nod 1057 N的阶乘

来源:互联网 发布:sql 获取exec 返回值 编辑:程序博客网 时间:2024/05/21 07:53

题目:求n的阶乘(1<=n<=10000)链接
思路:手算模拟,总共分成m段,每个段8位数字,存在m个变量中,这样可以防止溢出,c可以理解为进位。输出的时候最低位可能是0,所以不能直接输出一个0,而要补齐8位。

#include<cstdio>#include<queue>#include<iostream>#include<vector>#include<map>#include<cstring>#include<string>#include<set>#include<stack>#include<algorithm>#define cle(a) memset(a,0,sizeof(a))#define inf(a) memset(a,ox3f,sizeof(a))#define ll long long#define Rep(i,a,n) for(int i=a;i<=n;i++)using namespace std;const int INF = ( 2e9 ) + 2;const int maxn = 100000000;int main(){    int n;              // 求n的阶乘 n= 10000;    scanf("%d",&n);    ll a[100000];    ll c=0;    int m=0;    a[0]=1;    for(int i=1;i<=n;i++)    {        c=0;        for(int j=0;j<=m;j++)        {            a[j]=a[j]*i+c;            c=a[j]/maxn;            a[j]%=maxn;        }        if(c>0)        {            m++;            a[m]=c;        }    }    printf("%lld",a[m]);    for(int i=m-1;i>=0;i--)    printf("%0.8lld",a[i]); // 如果最低位为0,那么用0补满8位     printf("\n");}