奇怪的表達式求值

問題描述

常規的表達式求值,我們都會根據計算的優先級來計算。比如*/的優先級就高于+-。但是小易所生活的世界的表達式規則很簡單,從左往右依次計算即可,而且小易所在的世界沒有除法,意味著表達式中沒有/,只有(+, - 和 *)。現在給出一個表達式,需要你幫忙計算出小易所在的世界這個表達式的值為多少

輸入描述

輸入為一行字符串,即一個表達式。其中運算符只有-,+,*。參與計算的數字只有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;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容