7-38 数列求和-加强版

7-38 数列求和-加强版(20 分)

给定某数字A(1A9)以及非负整数N(0N100000),求数列之和S=A+AA+AAA++AAA(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