3 条题解
-
0
以下是C++版代码,轻松KO 详见代码
#include<iostream> using namespace std; typedef long long L; L s[10001], i, n, j, l; L a[10001], u;int main() {//基础定义 cin >> n;s[1] = l = 1;//输入,顺便初始化 for (i = 1;i <= n;i++) {//循环累加 for (j = 1;j <= l;j++) s[j] *= i;//阶乘计算 for (j = 1;j <= l;j++) { u = s[j] / 10; s[j] %= 10;//保留个位 s[j + 1] += u;//进位 }while (s[l + 1] > 0) l = l + 1;//长度增加 for (j = 1;j <= l;j++) {//累加 a[j] = a[j] + s[j];//相加 a[j + 1] += a[j] / 10;//进位 a[j] = a[j] % 10;//保留个位 }if (a[l + 1] > 0)l++;//长度增加 }for (i = l;i >= 1;i--)//倒序 cout << a[i];//输出 }
-
0
C++ :
#include<iostream> #include<cstring> using namespace std; int a[100000],n,i,y,xy[100000],s[100000]; void add() { int i; memset(xy,0,sizeof(xy)); xy[0]=max(s[0],a[0]); for (i=1;i<=xy[0];i++) { xy[i]+=s[i]+a[i]; xy[i+1]=xy[i]/10; xy[i]%=10; } while (xy[xy[0]+1]>0) { xy[xy[0]+2]=xy[xy[0]+1]/10; xy[xy[0]+1]%=10; xy[0]++; } s[0]=xy[0]; for (i=1;i<=xy[0];i++) s[i]=xy[i]; } int main() { cin>>n; a[0]=1; a[1]=1; s[0]=1; s[1]=0; for (y=1;y<=n;y++) { memset(xy,0,sizeof(xy)); xy[0]=a[0]; for (i=1;i<=a[0];i++) { xy[i]+=a[i]*y; xy[i+1]=xy[i]/10; xy[i]%=10; } while (xy[xy[0]+1]>0) { xy[xy[0]+2]=xy[xy[0]+1]/10; xy[xy[0]+1]%=10; xy[0]++; } for (i=1;i<=xy[0];i++) a[i]=xy[i]; a[0]=xy[0]; add(); } for (i=s[0];i>=1;i--) cout<<s[i]; cout<<endl; return 0; }
- 1
信息
- ID
- 2592
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 9
- 已通过
- 1
- 上传者