描述
求10000以内n的阶乘。
输入
只有一行输入,整数n(0<=n<=10000)。
输出
一行,即n!的值。
样例输入
100
样例输出
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
来源
JP06
方法1:
#include<iostream> using namespace std; int a[100005],n,l=1; int main(){ cin>>n; a[1]=1;//防止相乘时全部为0 for(int i=1;i<=n;i++) { for(int j=1;j<=l;j++) { a[j]=a[j]*i; a[j]=a[j-1]/10+a[j]; a[j-1]=a[j-1]%10; if(a[j]>=10&&j>=l) l++; } } for(int i=l;i>=1;i--) cout<<a[i]; return 0; }
方法2:
#include<iostream> using namespace std; int num[10005],len,n; int main(){ cin>>n; num[1]=1; for(int i=2;i<=n;i++){ for(int j=1;j<=10000;j++) num[j]=num[j]*i; for(int j=1;j<=10000;j++) num[j+1]+=num[j]/10000,num[j]%=10000; } len=10000; while(num[len]==0) len--; //cout<<len<<endl; cout<<num[len]; for(int i=len-1;i>=1;i--){ if(num[i]<1000) cout<<0; if(num[i]<100) cout<<0; if(num[i]<10) cout<<0; cout<<num[i]; } return 0; }