解法&&思路:
一個個累乘,中間結果用字符數組保存,按位累乘,一位一位的更新字符數組
Code:
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <stdio.h>
#include <math.h>
#define MAXN 10000
int main() {
int n;
while (std::cin >> n) {
int a[MAXN], b[MAXN];
std::fill(a, a+MAXN, 0);
std::fill(b, b+MAXN, 0);
a[0] = 1;
int len = 1;
for (int i = 1; i <= n; i++) {
int c = 0;
for (int j = 0; j < len; j++) {
int temp = i*a[j] + c;
a[j] = temp % 10;
c = temp / 10;
}
while (c >= 10) {
a[len++] = c % 10;
c /= 10;
}
if (c > 0) {
a[len++] = c;
}
}
for (int i = len - 1; i >= 0; i--) {
printf("%d", a[i]);
}
printf("\n");
}
}