# String Parsing# Greedy# Input Handling

d392 - 读取练习——强大的加法!

🔗 前往 ZeroJudge 原題

題目描述

題目要求讀取一行輸入,其中包含多個非負整數,並計算這些整數的和。輸入可能包含多行,每行都需要計算並輸出其數字的和。需要注意處理輸入字串中可能存在的額外空格。

解題思路

程式碼逐字讀取輸入字串。如果遇到數字字元,則開始提取完整的數字。提取數字時,會持續讀取後續的數字字元,直到遇到非數字字元。提取到的數字會轉換為 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;
	}
	
	
	
}

Discussion