NYOJ 28 大数阶乘
简单题。
附ac代码:
#include <stdio.h>
#define MAX 20000
int a[MAX];
//最高位在末尾非零项
void Compute(int n){
int i, j, t;
for(i = MAX - 1; i; --i)
if(a[i]) break; //找到末尾
j = i;
for(i = 0; i <= j; ++i)
a[i] *= n;
for(i = 0; i <= j + 5; ++i){ //保证末尾没有大于9的项
t = a[i] / 10;
a[i] %= 10;
a[i + 1] += t;
}
}
int main(){
int m;
a[0] = 1;
scanf("%d", &m);
for(int i = 1; i <= m; ++i)
Compute(i);
int i, j;
for(i = MAX - 1; i; --i)
if(a[i]) break; //找到末尾
for(j = i; j >= 0; --j)
printf("%d", a[j]);
putchar('\n');
return 0;
}
浙公网安备 33010602011771号