题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1042。
思路:采用万进制保存结果,参考链接:http://blog.csdn.net/lulipeng_cpp/article/details/7437641。代码如下:
#include <iostream>
#include <vector>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn = 10001;
int fac[maxn], num, idx;
int main() {
while (scanf("%d", &num) != EOF) {
memset(fac, 0, sizeof(fac));
fac[0] = 1;
idx = 0;
for (int i = 1; i <= num; i++) {
int jinwei = 0;
for (int j = 0; j <= idx; j++) {
jinwei += fac[j] * i;
fac[j] = jinwei % 10000;
jinwei /= 10000;
}
if (jinwei) fac[++idx] = jinwei;
}
printf("%d", fac[idx]);
idx--;
for (; idx >= 0; idx--) printf("%04d", fac[idx]);//输出不足四位在前面补0
printf("\n");
}
return 0;
}