問題描述
常規的表達式求值,我們都會根據計算的優先級來計算。比如*/的優先級就高于+-。但是小易所生活的世界的表達式規則很簡單,從左往右依次計算即可,而且小易所在的世界沒有除法,意味著表達式中沒有/,只有(+, - 和 *)。現在給出一個表達式,需要你幫忙計算出小易所在的世界這個表達式的值為多少
輸入描述
輸入為一行字符串,即一個表達式。其中運算符只有-,+,*。參與計算的數字只有0~9.
保證表達式都是合法的,排列規則如樣例所示。
輸出描述
輸出一個數,即表達式的值
輸入例子
3+5*7
輸出例子
56
分析
表達式只支持+ - *,沒有括號,而且運算符沒有優先級,只是按照從左到右的順序運算。通過觀察發現,表達式的正則表達式結構必然是(digit op digit)+,即數字和運算符是交替出現的。這樣一來計算就變得很簡單了。
note
有運算符優先級和括號的復雜表達式的求解,需要用到棧。會牽涉到編譯理論的相關知識。
代碼
#include <cstdio>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
string str;
getline(cin, str);
int ret = str[0] - '0';
for (int i = 1; i < str.size(); i += 2)
{
char c = str[i];
int val = str[i + 1] - '0';
switch (c)
{
case '+':
ret += val;
break;
case '-':
ret -= val;
break;
case '*':
ret *= val;
break;
}
}
printf("%d\n", ret);
return 0;
}