2 条题解
-
0问号 (周文浩) LV 10 @ 2023-9-27 18:23:00
#include<cstdio> using namespace std; int a[10000]; int main() { int n,l=1,x; a[0]=1; scanf("%d",&n); for(int i=2;i<=n;i++) { x=0; for(int j=0;j<l;j++) { if(j==0)//第一位开始即其进位处理 { a[j]=a[j]+i+x; x=a[j]/10; a[j]=a[j]%10; } else//对于第一位以后的进位处理 { a[j]=a[j]+x; x=a[j]/10; a[j]=a[j]%10; } } if(x>0) { a[l++]=x; } } while(a[l]==0&&l>=1) l--; for(int i=l;i>=0;i--) printf("%d",a[i]); }
-
02023-4-23 13:36:40@
#include <cstdio> int a[100],n,l = 1; void input_data() { scanf("%d",&n); } void get_ans() { for (int i = 1;i <= 99;i++) //先给每个位上的数置0 a[i] = 0; for (int i = 1;i <= n;i++) //从1 累加到 n { a[1] += i; //直接在个位上递增i for (int i = 1;i <= l;i++) //然后来处理进位问题 直接 + / 然后%一下就好 { a[i+1] += (a[i]/10); a[i] = a[i] % 10; } while (a[l+1] > 0) //延长位数。用一个while和l就能搞定 { l++; a[l+1] += (a[l] / 10); a[l] = a[l] % 10; } } } void output_ans() //最后要逆序输出答案。 { for (int i = l;i >= 1;i--) printf("%d",a[i]); } int main() { input_data(); get_ans(); output_ans(); return 0; }
- 1
信息
- ID
- 1196
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 66
- 已通过
- 29
- 上传者