2 条题解
-
1
#include <bits/stdc++.h> using namespace std; int a[10005],s[10005]; //每次都计算 a数组*k void ans(int k) { int i; //每一位都乘以k for(i=0;i<10000;i++){ a[i] = a[i]*k; } for(i=0;i<10000;i++){ a[i+1] = a[i+1] + a[i]/10; a[i] = a[i]%10; } } void add() { int i; for(i=0;i<10000;i++){ s[i] = s[i]+a[i]; s[i+1] = s[i+1] + s[i]/10; s[i] = s[i]%10; } } int main() { int n,i,j; scanf("%d",&n); for(i=1;i<=n;i++){ memset(a,0,sizeof(a)); a[0] = 1; for(j=1;j<=i;j++){ ans(j); } add(); } int p=1000; for(i=p;i>=0;i--){ if(s[i]!=0){ p = i; break; } } for(i=p;i>=0;i--){ printf("%d",s[i]); } return 0; }//代码已AC
-
0
#include <bits/stdc++.h> using namespace std; int n , ans[1005] , t[1005] = {0 , 1};//t数组保留当前数的阶乘 int main() { cin >> n; for (int i = 1 ; i <= n ; i++) { //乘当前数字 for (int j = 1 ; j <= 1000 ; j++) t[j] *= i; for (int j = 1 ; j <= 1000 ; j++) { if (t[j] > 9) { t[j + 1] += t[j] / 10; t[j] %= 10; } } //将结果加到ans数组里 for (int j = 1 ; j <= 1000 ; j++) ans[j] += t[j]; } //处理进位 for (int i = 1 ; i <= 1000 ; i++) { if (ans[i] > 9) { ans[i + 1] += ans[i] / 10; ans[i] %= 10; } } //输出 int top = 1000; while (ans[top] == 0) top--; for (int i = top ; i >= 1 ; i--) { cout << ans[i]; } return 0; }//已AC
- 1
信息
- ID
- 293
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 145
- 已通过
- 49
- 上传者