NYOJ 35 表示式求值(棧)

2021-07-15 08:04:12 字數 1582 閱讀 8706

表示式求值

時間限制:3000 ms | 記憶體限制:65535 kb

難度:4

描述 acm隊的mdd想做乙個計算器,但是,他要做的不僅僅是一計算乙個a+b的計算器,他想實現隨便輸入乙個表示式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。

比如輸入:「1+2/4=」,程式就輸出1.50(結果保留兩位小數)

輸入 第一行輸入乙個整數n,共有n組測試資料(n<10)。

每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式,每個表示式都是以「=」結束。這個表示式裡只包含+-*/與小括號這幾種符號。其中小括號可以巢狀使用。資料保證輸入的運算元中不會出現負數。

資料保證除數不會為0

輸出 每組都輸出該組表示式的運算結果,輸出結果保留兩位小數。

樣例輸入

2

1.000+2/4=

((1+2)*5+1)/4=

樣例輸出

1.50

4.00

ac**

/*表示式求值

輸入第一行輸入乙個整數n,共有n組測試資料(n<10)。

每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式,

每個表示式都是以「=」結束。

這個表示式裡只包含+ - * /與小括號這幾種符號。其中小括號可以巢狀使用。

資料保證輸入的運算元中不會出現負數。

資料保證除數不會為0

輸出每組都輸出該組表示式的運算結果,輸出結果保留兩位小數。*/

#include

#include

#include

#include

using

namespace

std;

char s[1010];

stack

dsta;

stack

osta;

int main()

i--;

if(b!=0) dsta.push(v/pow(10,i-b));//計算小數

else dsta.push(v);

}//將數字壓入棧中

else

if(s[i]=='+'||s[i]=='-')

dsta.push(c);//將計算後的數壓入棧

osta.pop();//彈出符號

}osta.push(s[i]);

}else

if(s[i]=='*'||s[i]=='/')

else

if(osta.top()=='/')

osta.push(s[i]);

}else

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

dsta.push(c);

osta.pop();

}osta.pop();}}

printf("%.2lf\n",dsta.top());//輸出棧頂(最終結果)

dsta.pop();//清空棧

}return

0;}

NYOJ35 表示式求值

搞了差不多2天,原來乙個是sstream的用法困惑好久,需要對陣列清零 include include include include include include includeusing namespace std char mid 1008 post 1008 char compare ch...

nyoj 35 表示式求值

描述 acm隊的mdd想做乙個計算器,但是,他要做的不僅僅是一計算乙個a b的計算器,他想實現隨便輸入乙個表示式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。比如輸入 1 2 4 程式就輸出1.50 結果保留兩位小數 輸入 第一行輸入乙個整數n,共有n組測試資料 n 10 每組測試資料只...

NYOJ 35 表示式求值

表示式分為字首表示式,中綴表示式,字尾表示式,對於不涉及運算子優先順序的用中綴表示式直接做比較方便,如果涉及到的優先順序的把中綴表示式轉化成字首或字尾表示式比較方便。本體我用的是字首表示式解題。include include include include includeusing namespac...