14:求10000以内n的阶乘
- 总时间限制:
- 5000ms
- 内存限制:
- 655360kB
- 描述
-
求10000以内n的阶乘。
- 输入
- 只有一行输入,整数n(0<=n<=10000)。
- 输出
- 一行,即n!的值。
- 样例输入
-
100
- 样例输出
-
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
- 来源
JP06
这道题..........直接套原来的模板不行....原因找了半天是因为数组开小了,,,,,坑啊
#include <stdio.h> #include <string.h> struct bigInteger{ //int digit [1000] ; 这个1000大小过不了 int digit [10000] ; int size; void init(){ for (int i = 0; i < 1000; i ++) digit [i] = 0; size = 0; } void set(int x){ init(); do{ digit[size++]=x%10000; x/=10000; }while(x!=0); } void output(){ for(int i=size-1;i>=0;i--){ if(i!=size-1){ printf("%04d",digit[i]); }else{ printf("%d",digit[i]); } } printf("\n"); } bigInteger operator * (int x)const{ //乘法 bigInteger ret; ret.init(); int c=0; for(int i=0;i<size;i++){ int tmp=x*digit[i]+c; c=tmp/10000; tmp%=10000; ret.digit[ret.size++]=tmp; } if(c!=0){ ret.digit[ret.size++]=c; } return ret; } }a; int main(){ int n; while(scanf("%d",&n)!=EOF){ a.init(); a.set(1); for(int i=1;i<=n;i++){ a=a*i; } a.output(); } return 0; }