九度OJ 1051:数字阶梯求和 (大数运算)
- 题目描述:
-
给定a和n,计算a+aa+aaa+a...a(n个a)的和。
- 输入:
-
测试数据有多组,输入a,n(1<=a<=9,1<=n<=100)。
- 输出:
-
对于每组输入,请输出结果。
- 样例输入:
-
1 10
- 样例输出:
-
1234567900
思路:
会超出long long的表示范围,典型的大数运算,注意循环的方式,第n位的数要加n-i次。
sum[i] += a*(n-i);
代码:
#include <stdio.h> int main(void) { int n, a, i; unsigned int sum[100]; int flag; while (scanf("%d%d",&a, &n) != EOF) { for (i=0; i<100; i++) sum[i] = 0; i = 0; do { sum[i] += a*(n-i); if (sum[i] >= 10) { sum[i+1] += sum[i]/10; sum[i] %= 10; } i++; } while(i<n); flag = 1; for (i=99; i>=0; i--) { if (flag) { if (sum[i] == 0) continue; flag = 0; } printf("%d", sum[i]); } printf("\n"); } return 0; } /************************************************************** Problem: 1051 User: liangrx06 Language: C Result: Accepted Time:0 ms Memory:912 kb ****************************************************************/
编程算法爱好者。