# String Parsing# Arithmetic# Greedy

d615 - 計算機運算

🔗 前往 ZeroJudge 原題

題目描述

題目要求模擬一個簡單的計算機,輸入一個包含數字和運算符的字串,並計算出運算式的值。輸入包含多組測試資料,每組資料為一個運算式,運算式中的數字和運算符之間以空格分隔。

解題思路

程式碼透過逐一讀取字元來解析運算式。首先讀取兩個初始數字,然後進入迴圈,迴圈中判斷讀取的字元是數字還是運算符。如果讀取到數字,則將其轉換為整數,並讀取後續的數字,將它們組合成一個更大的數字。如果讀取到運算符,則根據運算符執行相應的運算。迴圈持續進行,直到輸入結束。

複雜度分析

  • 時間複雜度: O(n),其中 n 是輸入字串的長度。因為程式碼需要遍歷整個輸入字串一次。
  • 空間複雜度: O(1),程式碼只使用了幾個變數來儲存中間結果,空間使用量不隨輸入大小變化。

程式碼

#include <iostream>
using namespace std;
int main(){
	cin.tie(0); ios::sync_with_stdio(false);
	long long int s,sum=0;
	char q;
	cin >> sum >> sum;
	while(cin >> q){
		if(q>='0'){
			cout << sum << "\n";
			s=q-48;
			while(cin >> q){
				if(q<'0')break;
				s=(s<<3)+(s<<1);
				s+=q-48;
			}
			sum=s;
		}
		cin >> s;
		if(q=='+')
			sum+=s;
		else if(q=='-')
			sum-=s;
		else if(q=='*')
			sum*=s;
		else
			sum/=s;
	}
	cout << sum ;
}

Discussion