洛谷 P1449 字尾表示式

2021-10-07 21:49:10 字數 1902 閱讀 4565

題目鏈結

題目描述

所謂字尾表示式是指這樣的乙個表示式:式中不再引用括號,運算符號放在兩個運算物件之後,所有計算按運算符號出現的順序,嚴格地由左而右新進行(不用考慮運算子的優先順序)。

如:3*(5–2)+7對應的字尾表示式為:3.5.2.-*7.+@。』@』為表示式的結束符號。『.』為運算元的結束符號。

輸入格式

輸入:字尾表示式

輸出格式

輸出:表示式的值

輸入輸出樣例

輸入 #1

3.5.2.-*7.+@

輸出 #1

16輸入 #1

10.28.30./*7.-@

輸出 #1

-7題解思路

這題很明顯要用棧stack,遇到數字就存入,遇到 『.』 就跳過,遇到運算符號就從棧頂拉出兩個元素,運算後push進去。

需要注意的是:我們用的字串讀取,當遍歷是存入數字的時候可能不止乙個字元,這時要寫乙個迴圈,讀入字元直到 『.』 為止。

ac**:

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

stack<

int> t;

intmain()

i--; t.

push

(z);

}else

if(key[i]

!='.')if

(t.empty()

==1) y=0;

else

if(key[i]

=='*')if

(key[i]

=='/')if

(key[i]

=='+')if

(key[i]

=='-')}

} cout

}

用vector也可以,畢竟取一邊push,pop和stack也就沒區別了。

**:

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

vector<

int> t;

intmain()

for(i=

0;ilength()

&&key[i]

!='@'

;i++

) i--

; t.

push_back

(z);

}else

if(key[i]

!='.')if

(t.empty()

==1) y=0;

else

if(key[i]

=='*')if

(key[i]

=='/')if

(key[i]

=='+')if

(key[i]

=='-')}

} cout

;}

這裡我用的輸入方式是乙個字元乙個字元地讀入,以為不知道他的輸入中是否有空格。。

後來發現直接cin字串就可以了。

挺水的。。 不是

洛谷P1449 字尾表示式

所謂字尾表示式是指這樣的乙個表示式 式中不再引用括號,運算符號放在兩個運算物件之後,所有計算按運算符號出現的順序,嚴格地由左而右新進行 不用考慮運算子的優先順序 如 3 5 2 7對應的字尾表示式為 3 5 2 7 為表示式的結束符號。為運算元的結束符號。輸入格式 輸入 字尾表示式 輸出格式 輸出 ...

洛谷 P1449 字尾表示式

題目描述 所謂字尾表示式是指這樣的乙個表示式 式中不再引用括號,運算符號放在兩個運算物件之後,所有計算按運算符號出現的順序,嚴格地由左而右新進行 不用考慮運算子的優先順序 如 3 5 2 7對應的字尾表示式為 3 5 2 7 為表示式的結束符號。為運算元的結束符號。輸入格式 輸入 字尾表示式 輸出格...

P1449 字尾表示式(洛谷)

思路 定義乙個來存放int型的棧,然後將輸入的資料轉換後存入棧中,但是以運算符號為分割,先進第乙個數,再進第二個數,接著將後進的數先丟擲,此時先進的數就是棧頂元素了,然後將這兩個數做運算後再將第乙個數丟擲以及將運算結果sum壓入棧中,以此迴圈即可。include using namespace st...