输入N求N的阶乘的准确值。
Input
输入N(1 <= N <= 10000)
Output
输出N的阶乘
Input示例
5
Output示例
120
题解:之前写过一个大数的阶乘问题,但是运行时间太久了,过不去。看了别人写的答案知道了要把结果分成许多段来存,输出的时候要注意一下格式。还有一点我很不明白,希望有人解惑,我定义MOD_的时候用1e8编译通不过,但是用100000000就可以通过编译。
#include<bits/stdc++.h> using namespace std; #define MOD_ 100000000 int main() { int n; scanf("%d",&n); long long int a[10000]; a[0]=1; long long int m,t=0; //m为进位,t表示分成几段。 for(int i=1;i<=n;i++) { m=0; for(int j=0;j<=t;j++) { a[j]=a[j]*i+m; m=a[j]/MOD_; a[j]=a[j]%MOD_; } if(m>0) { t++; a[t]=m; } } printf("%lld",a[t]); for(int i=t-1;i>=0;i--) { printf("%08lld",a[i]); } return 0; }顺便把我的没有过的代码贴上吧。
#include<bits/stdc++.h> using namespace std; int main() { int n; scanf("%d",&n); char a[40000]; memset(a,0,sizeof(a)); a[0]=1; int sum; for(int i=1;i<=n;i++) { sum=0; for(int j=0;j<40000;j++) { sum=sum+a[j]*i; a[j]=sum%10; sum=sum/10; } } int k=39999; while(a[k]==0) { k--; } for(int i=k;i>=0;i--) { printf("%d",a[i]); } return 0; }