#include <bits/stdc++.h> using namespace std; void show(int a[],int n){ for(int i = 0;i < n;i++){ cout<<a[i]<<" "; } cout<<endl; } int main(){ int a[100][100] = {0};//存储每一项(2、2*2、2*2*2...) int r[100] = {0};//存储总和的结果 int i,j,n; cin>>n; a[1][0] = 1; int k = 1;//代表第i项共有多少位 for(i = 2;i <= n;i++){ //逐项乘n for(j = 0;j < k;j++){ a[i][j] = a[i - 1][j] * i; } //最多多3位出来(乘以100) k = k + 3; for(j = 0;j < k;j++){ if(a[i][j] >= 10){ a[i][j + 1] = a[i][j + 1] + a[i][j] / 10; a[i][j] = a[i][j] % 10; } } //判断第i项乘以n后有没有多一项出现 while(a[i][k-1]==0){ k--; } // show(a[i],k); } //求和 for(i = 1;i <= n;i++){ for(j = 0;j < k;j++){ r[j] = r[j] + a[i][j]; if(r[j] >= 10){ r[j + 1] += r[j] / 10; r[j] = r[j] % 10; } } if(r[k] > 0){ k++; } } int p = 0; for(i = k - 1;i >= 0;i--){ if(r[i] != 0){ p = i; break; } } for(i = p;i >= 0;i--){ cout<<r[i]; } } /************************************************************** Problem: 1296 User: admin Language: C++ Result: Accepted Time:16 ms Memory:2076 kb ****************************************************************/