NYOJ 1272 表示式求值

2021-09-19 09:24:21 字數 1183 閱讀 5302

題目描述:

假設表示式定義為: 1. 乙個十進位制的正整數 x 是乙個表示式。 2. 如果 x 和 y 是 表示式,則 x+y, xy 也是表示式; 優先順序高於+. 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

輸出描述:

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

樣例輸入:

複製 3

12+23

12*(2+3)

12*(2+3)+smax(333,220+280)

樣例輸出:

1860

69

#include#include#include#include#includeusing namespace std;

stackdata; //儲存數字

stackop; //儲存字元

char s[1005];

int main()

else if(s[i]>='0'&&s[i]<='9')

else if(s[i]=='+')

data.push(c);;

op.pop();

}op.push(s[i]);

}else if(s[i]=='*')

op.push(s[i]);

}else if(s[i]==')'||s[i]==',') //計算smax

while(a!=0)

c=max(numa,numb);

break;}}

data.push(c);

op.pop();

}op.pop();

if(s[i]==',')

op.push(s[i]);

}

} printf("%d\n",data.top());

data.pop();

} return 0;

}

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,...