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