描述
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...