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;
}