ʕ·͡ˑ·ཻ ʕ•̫͡• ʔ•̫͡•ཻʕ•̫͡•ʔ•͓͡•ʔ

14:求10000以内n的阶乘

描述

求10000以内n的阶乘。

输入

只有一行输入,整数n(0<=n<=10000)。

输出

一行,即n!的值。

样例输入

1
100

样例输出

1
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

题解:

由低位到高位计算每一位数字与i相乘的数再依次进位,这里要注意的是算出的最高位的数不一定是2位数,也可以用万进制来计算。

AC代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<bits/stdc++.h>
using namespace std;

const int N = 1000000;

int a[N];

int main(){
int n;
cin>>n;
memset(a,0,sizeof(a));
a[0] = 1;
a[1] = 1;
for(int i = 2; i <= n; i++) {
int x = 0;
for(int j = 1; j <= a[0]; j++) {
a[j] = a[j] * i + x;
x = a[j] / 10;
a[j] %= 10;
}
//注意的是算出的最高位的数不一定是2位数,因为之前这里我用的if来判断只能计算到32!
while(x>0) {
a[a[0]+1] += x % 10;
++a[0];
x /= 10;
}
}
for(int i = a[0]; i >= 1; i--) {
cout<<a[i];
}
return 0;
}