NYIST 1272 表示式求值 模擬

2021-08-18 02:37:45 字數 1240 閱讀 3028

題意:描述假設表示式定義為: 1. 乙個十進位制的正整數 x 是乙個表示式。 2. 如果 x 和 y 是 表示式,則 x+y, x*y 也是表示式; *優先順序高於+. 3. 如果 x 和 y 是 表示式,則 函式 smax(x,y)也是表示式,其值為:先分別求出 x ,y 值的各位數字之和,再從中選最大數。 4.如果 x 是 表示式,則 (x)也是表示式。 例如: 表示式 12*(2+3)+smax(333,220+280) 的值為 69。 請你程式設計,對給定的表示式,輸出其值。  輸入

【標準輸入】 第一行: t 表示要計算的表示式個數 (1≤ t ≤ 10) 接下來有 t 行, 每行是乙個字串,表示待求的表示式,長度<=1000

輸出【標準輸出】 對於每個表示式,輸出一行,表示對應表示式的值。

思路:我們用兩個棧,乙個棧用於存數字,乙個棧用於存符號,其中我們需要先定義符號的優先順序,比如說我們當前遇到了*號,棧頂元素是+號說明我們應該先算*號,那麼我們需要先把*放進棧裡等待之後的運算,如果是當前是+號,棧頂元素是*號說明我們應該先算乘號,那麼我們就計算當前的數字,看**把:

#include using namespace std;

char precede(char a, char b)

,// +

,// -

,// *

,// /

,// (

,// )

,// #

,// smax

// ,

};int x, y;

switch(a)

switch(b)

// printf("%d %d\n",x,y);

return op[x][y];

}int get_sum(int a)

return ans;

}int smax(int a, int b)

int calculation(int a,int b,char op)

}int main()

else

switch(precede(op.top(),ch[i])) //判斷優先順序

case '=': //如果相等的話,我們就直接pop 比如 (和);

case '>'://如果當前小 比如果 3*2+? 那麼我們直接算出來就好了 }}

if(ch[i] == 'm') i+=4;

} cout<} return 0;}/*

101+2*(2+3)/2

*/

nyoj 1272 表示式求值

描述 假設表示式定義為 1.乙個十進位制的正整數 x 是乙個表示式。2.如果 x 和 y 是 表示式,則 x y,x y 也是表示式 優先順序高於 3.如果 x 和 y 是 表示式,則 函式 smax x,y 也是表示式,其值為 先分別求出 x y 值的各位數字之和,再從中選最大數。4 如果 x 是...

NYOJ 1272 表示式求值

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 假設表示式定義為 1.乙個十進位制的正整數 x 是乙個表示式。2.如果 x 和 y 是 表示式,則 x y,x y 也是表示式 優先順序高於 3.如果 x 和 y 是 表示式,則 函式 smax x,y 也是表示式,其值為 先分...

NYOJ 1272 表示式求值

思路 套用原來的模板,然後稍加修改。不懂得同學看這裡 表示式求值。我們相當於新增了兩個運算子smax和,我們只需要把他們的優先順序新增到表裡面。然後實現smax函式即可。includeusing namespace std char precede char a,char b smax int x,...