7-38 数列求和-加强版(20 分)
给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+?+AA?A(N个A)。例如A=1, N=3时,S=1+11+111=123。
输入格式:
输入数字A与非负整数N。
输出格式:
输出其N项数列之和S的值。
输入样例:
1 3
输出样例:
123
思路:直接用长整形累加代码简单,但是超范围了(;′⌒`),本来还试了下使用数组来进行发现还是没AC。然后换了种思路横着一个个加不行,那纵着加呢?(横纵参考下图)很完美,空间和时间上还都得到了优化(相比我之前没AC的代码)
以下是AC代码:
#include<stdio.h> #include<stack> #include<iostream> using namespace std; int main() { int a, n; cin >> a >> n; if (n == 0) //测试点最小A和N { cout << 0 << endl; return 0; } stack<int> cnt; //栈用来存储要输出的位 int flag = 0; //保存输出以后还剩的余数 for (int i = n; i >= 1; i--) { int temp = flag + a*i; cnt.push(temp % 10); flag = temp / 10; } if (flag!=0) cout << flag; while (!cnt.empty()){ cout << cnt.top(); cnt.pop(); } cout << endl; return 0; }
原文地址:https://www.cnblogs.com/zengguoqiang/p/8342866.html
时间: 2024-11-05 14:47:19