大数阶乘
我们要先从1开始乘:
1 * 2=2,将2存到a[0]中,
接下来是用a[0] * 3;
2*3=6,将6储存在a[0]中,
接下来是用a[0]*4;
6*4=24,是两位数,那么24%10==4存到a[0]中,24/10==2存到a[1]中,
接下来是用a[0]*5;a[1]*5+num(如果前一位相乘结果位数是两位数,那么num就等于十位上的那个数字;如果是一位数,num==0)
24*5=120,是三位数,那么120%10==0存到a[0]中,120/10%10==2存到a[1]中,120/100==1存到a[2]中,
代码(10000的阶层):
#include <stdio.h>
#include <string.h>
int main() {
int n;
int a[200000];
while (scanf("%d", &n) != EOF) {
memset(a, 0, sizeof(a));
a[0] = 1;
int ans = 1;
int sum , i, j;
for (i = 2; i <= n; i++) {
int num = 0;
for (j = 0; j < ans; j++) {
sum = a[j] * i + num;
a[j] = sum % 10;
num = sum / 10;
}
while (num) {
a[ans] = num % 10;
num /= 10;
ans++;
}
}
for (i = ans - 1; i >=0;i-- )
printf("%d", a[i]);
printf("\n" );
}
return 0;
}