d615 - 計算機運算
題目描述
題目要求模擬一個簡單的計算機,輸入一個包含數字和運算符的字串,並計算出運算式的值。輸入包含多組測試資料,每組資料為一個運算式,運算式中的數字和運算符之間以空格分隔。
解題思路
程式碼透過逐一讀取字元來解析運算式。首先讀取兩個初始數字,然後進入迴圈,迴圈中判斷讀取的字元是數字還是運算符。如果讀取到數字,則將其轉換為整數,並讀取後續的數字,將它們組合成一個更大的數字。如果讀取到運算符,則根據運算符執行相應的運算。迴圈持續進行,直到輸入結束。
複雜度分析
- 時間複雜度: 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 ;
}