# String Parsing# Greedy# Input Handling

d402 - 1.擾亂專家

🔗 前往 ZeroJudge 原題

題目描述

題目要求從包含雜亂字符的輸入中提取兩個整數,並計算它們的和。輸入中數字是連續的,但可能夾雜其他字符。

解題思路

這題主要考驗對輸入流的處理能力。程式碼使用 getchar() 逐個字符讀取輸入。首先,讀取字符直到遇到數字,然後提取第一個數字。提取數字的過程是,讀取數字字符,直到遇到非數字字符。接著,重複相同的過程提取第二個數字。最後,將兩個提取的數字相加並輸出結果。

複雜度分析

  • 時間複雜度: O(N),其中 N 是輸入的字符數。最壞情況下,需要遍歷整個輸入來找到兩個數字。
  • 空間複雜度: O(1),程式只使用了幾個整數變數來存儲數字,空間使用是常數級別。

程式碼

#include <iostream>
using namespace std;
int main(){
	char a;
	long long int aa=0,bb=0;
	while(a=getchar()){
		if(a>='0'&&a<='9'){
			aa+=a-48;
			while(a=getchar()){
				if(a<'0'||a>'9')
					break;
				aa*=10;
				aa+=a-48;
			}
			break;
		}
	}
	while(a=getchar()){
		if(a>='0'&&a<='9'){
			bb+=a-48;
			while(a=getchar()){
				if(a<'0'||a>'9')
					break;
				bb*=10;
				bb+=a-48;
			}
			break;
		}
	}
	cout << aa << " " << bb << " " << aa+bb;
}

Discussion