题目中N的范围比较大,考虑到大整数类运算比较复杂,考虑使用10000进制
做法:开个大数组,数组的每一位作为10000进制数的每一位,缝10000进1
代码如下:
#include <bits/stdc++.h>
using namespace std;
void fac(int n){ //10000进制数组
static int a[10002];
int digital = 1,carry = 0;
a[1] = 1;
if(!n) printf("1");
else{
for(int i = 1;i <= n;i++){
carry = 0;
for(int j = 1;j <= digital;j++){
a[j] = a[j]*i + carry;
carry = a[j]/10000;
a[j] %= 10000;
}
if(carry) a[++digital] = carry;
}
cout<<a[digital];
for(int k = digital - 1; k > 0;k--)
printf("%04d",a[k]);
}
printf("\n");
}
int main(){
//std::ios::sync_with_stdio(false);
//std::cin.tie(0);
int n = 1;
while(scanf("%d",&n) == 1){
fac(n);
}
return 0;
}