問(wèn)題描述
常規(guī)的表達(dá)式求值,我們都會(huì)根據(jù)計(jì)算的優(yōu)先級(jí)來(lái)計(jì)算。比如*/的優(yōu)先級(jí)就高于+-。但是小易所生活的世界的表達(dá)式規(guī)則很簡(jiǎn)單,從左往右依次計(jì)算即可,而且小易所在的世界沒(méi)有除法,意味著表達(dá)式中沒(méi)有/,只有(+, - 和 *)?,F(xiàn)在給出一個(gè)表達(dá)式,需要你幫忙計(jì)算出小易所在的世界這個(gè)表達(dá)式的值為多少
輸入描述
輸入為一行字符串,即一個(gè)表達(dá)式。其中運(yùn)算符只有-,+,*。參與計(jì)算的數(shù)字只有0~9.
保證表達(dá)式都是合法的,排列規(guī)則如樣例所示。
輸出描述
輸出一個(gè)數(shù),即表達(dá)式的值
輸入例子
3+5*7
輸出例子
56
分析
表達(dá)式只支持+ - *,沒(méi)有括號(hào),而且運(yùn)算符沒(méi)有優(yōu)先級(jí),只是按照從左到右的順序運(yùn)算。通過(guò)觀察發(fā)現(xiàn),表達(dá)式的正則表達(dá)式結(jié)構(gòu)必然是(digit op digit)+,即數(shù)字和運(yùn)算符是交替出現(xiàn)的。這樣一來(lái)計(jì)算就變得很簡(jiǎn)單了。
note
有運(yùn)算符優(yōu)先級(jí)和括號(hào)的復(fù)雜表達(dá)式的求解,需要用到棧。會(huì)牽涉到編譯理論的相關(guān)知識(shí)。
代碼
#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;
}