在做ACM时会碰上一些阶层的问题,然而这些阶层有时又会很大,此时,我们便可以使用大数阶层的算法来轻松解决此类问题。
例子见” UVA-568 Just the Facts“
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int num[3000];//最后的结果是以“个十百千万”的顺序分别储存在数组中的。
int main() {
int n;
while ( ~scanf("%d", &n) ) {
memset (num, 0, sizeof(num));
num[0] = 1;
for (int i = 2; i <= n; i++) {
int c = 0;//用来记录进位的值
for (int j = 0; j < 3000; j++) {
int s = num[j] * i + c;
num[j] = s % 10;
c = s / 10;
}
}
int j;
for (int i = 2999; i >= 0; i--)//找到非0的最高位
if ( num[i] ) {
j = i;
break;
}
for (int i = j; i >= 0; i--)//倒序输出
cout << num[i];
cout << endl;
}
return 0;
}