表示式求值1

2021-09-12 10:06:44 字數 1128 閱讀 3309

描述

acm隊的mdd想做乙個計算器,但是,他要做的不僅僅是一計算乙個a+b的計算器,

他想實現隨便輸入乙個表示式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。

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

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

每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式,每個表示式都是以「=」結束。

這個表示式裡只包含+-*與小括號這幾種符號。其中小括號可以巢狀使用。資料保證輸入的運算元中不會出現負數。

資料保證除數不會為0 

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

樣例輸入

21.000+2/4=

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

樣例輸出

1.50

4.00

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

char s[1010];

stacks1;//資料棧

stacks2;//符號棧

int main()

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

else

i++;

}i--;

if(b!=0)//有小數存在

else

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

s1.push(c);//把計算結果壓入棧

s2.pop();//清乙個字元棧

}s2.push(s[i]);//遇到左括號,壓棧

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

else if(s1.top()=='/')

s2.push(s[i]);

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

s1.push(c);

s2.pop();

}s2.pop();

}} printf("%.2lf\n",s1.top());

s1.pop();//清最後乙個等號

} return 0;

}

表示式求值(1)

描述 dr.kong設計的機械人卡多掌握了加減法運算以後,最近又學會了一些簡單的函式求值,比如,它知道函式min 20,23 的值是20 add 10,98 的值是108等等。經過訓練,dr.kong設計的機械人卡多甚至會計算一種巢狀的更複雜的表示式。假設表示式可以簡單定義為 1.乙個正的十進位制數...

5 表示式求值(1)

成績 10開啟時間 2018年10月10日 星期三 20 00 折扣0.8 折扣時間 2018年11月1日 星期四 23 55 允許遲交 否關閉時間 2018年11月11日 星期日 23 55 我們的教材中已經介紹了表示式求值的演算法,現在我們將該演算法的功能進行擴充套件,要求可以處理的運算子包括 ...

表示式求值

程式的說明見清華大學出版社 資料結構 c語言版 include include define stack init size 40 define stackincrement 20 define ok 1 define false 0 typedef structs stack typedef st...