d392 - 读取练习——强大的加法!
題目描述
題目要求讀取一行輸入,其中包含多個非負整數,並計算這些整數的和。輸入可能包含多行,每行都需要計算並輸出其數字的和。需要注意處理輸入字串中可能存在的額外空格。
解題思路
程式碼逐字讀取輸入字串。如果遇到數字字元,則開始提取完整的數字。提取數字時,會持續讀取後續的數字字元,直到遇到非數字字元。提取到的數字會轉換為 long long int 型別,並加到總和 ans 中。每次提取完一個數字後,將 number 重置為 0。對於每一行輸入,計算完總和後,輸出結果並重置 ans。
複雜度分析
- 時間複雜度: O(N),其中 N 是輸入字串的長度。程式碼需要遍歷整個輸入字串。
- 空間複雜度: O(1),程式碼只使用了幾個常數大小的變數,不隨輸入大小變化。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main () {
string a;
long long int number=0;
long long int ans=0;
while(getline(cin,a)){
for(int i=0;i<a.length();i++){
if(a[i]>=48&&a[i]<=57){
number+=a[i]-48;
while(a[i+1]>=48&&a[i+1]<=57){
i++;
number*=10;
number+=a[i]-48;
}
}
ans+=number;
number=0;
}
cout << ans << endl;
ans=0;
}
}