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;
}

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM