南阳oj题目35 表达式求值【栈的应用】

来源:互联网 发布:iphone自动点击软件 编辑:程序博客网 时间:2024/06/04 18:30

表达式求值

时间限制:3000 ms  |  内存限制:65535 KB
难度:4
描述
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.504.00
来源
数据结构课本例题改进



#include<algorithm>#include<cstdio>#include<iostream>#include<stack>using namespace std;stack<double>a;//数据栈 stack<char>b;//操作符栈 int ValueCmp(char c){if(c=='(') return 0;else if(c=='+'||c=='-'){return 1;}else if(c=='*'||c=='/'){return 2;}}void calc(){double num1,num2;char ch;if(a.size()>=2 && !b.empty()){num1=a.top();a.pop();num2=a.top();a.pop();ch=b.top();if(ch=='+'){a.push(num1+num2);}else if(ch=='-'){a.push(num2-num1);}else if(ch=='*'){a.push(num1*num2);}else if(ch=='/'){a.push(num2/num1);}b.pop();}}int main(){int i,j;int t;char s[1010];double temp;scanf("%d",&t);getchar();while(t--){gets(s);i=0;while(1){if(isalnum(s[i])){sscanf(s+i,"%lf",&temp);a.push(temp);while(isalnum(s[i]) || s[i]=='.') ++i;}//double d=a.top();char ch=s[i++];if(ch=='\0'||ch=='=') break;if(ch=='('){b.push(ch);}else if(ch==')'){while(!b.empty()){if(b.top()=='(')//直到栈顶为'('时停止 {b.pop();break;}elsecalc() ;}}else{int flag=ValueCmp(ch);while(!b.empty() && ValueCmp(ch)<=ValueCmp(b.top())){calc();} b.push(ch);}}while(!b.empty())  calc();printf("%.2lf\n",a.top());//int flag=a.empty();a.pop();//printf("%d  ",flag);/*while(a.empty()){a.pop();}*/}return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 理发店顾客钱收少了怎么办 淘宝店铺搜不到怎么办 淘宝客服不在线怎么办 淘宝售后服务客服帮着卖家怎么办 老公一年找不到工作怎么办 淘宝店家跑了怎么办 淘宝卖家跑了怎么办啊 没发货退不了怎么办 微信上遇到诈骗怎么办 拼多多二级处罚怎么办 淘宝售后过了怎么办 遇到耍无赖的人怎么办 欠钱耍无赖得怎么办 借钱不还耍无赖怎么办 淘宝开食品店证件怎么办 手机卡掉了话费怎么办 手机变板砖怎么办 10086短信收不到怎么办 苹果手机成砖头怎么办 手机死砖了怎么办 苹果电脑成砖了怎么办 苹果误充游戏怎么办 话费如果交错了怎么办 联通充错号码怎么办 淘宝店铺假流量怎么办 空号交错话费怎么办 微信上被骗4800怎么办 移动手机号空号怎么办 微信充值充错号码对方是空号怎么办 买了运险费退货怎么办 手机玩吃鸡有点卡怎么办 微信手机充值充到空号怎么办 用微信交话费交错了怎么办 眼睫毛烫坏了怎么办 眼睫毛太硬了怎么办 微信话费充值空号怎么办 睫毛烫焦了怎么办 答题卡中间对折怎么办 充q币错误怎么办 睫毛烫坏了怎么办 电话充错号码怎么办