在高精度乘法的基础上进行改善,能够减少循环的次数。
#include<iostream>
using namespace std;
const int R=10000;
const int N=10005;
void multi(int a[],int n){
for(int i=1;i<=a[0];i++){
a[i]*=n;
}
int i;
for(i=1;i<=a[0];i++){
a[i+1]+=a[i]/R;
a[i]%=R;
}
while(a[i]){
cout << a[0] << endl;
a[i+1]=a[i]/R;
a[i++]%=R;
a[0]++;
}
}
void print(int a[]){
for(int i=a[0];i>0;i--){
cout << a[i];
}
cout << endl;
}
int main(){
string s;
int n;
while(cin >> n){
int m=s.size();
int a[N]={1,1},j=1;
for(int i=2;i<=n;i++){
multi(a,i);
}
print(a);
}
return 0;
}