nyist 35 表达式求值
来源:互联网 发布:网络热点事件2017 编辑:程序博客网 时间:2024/04/30 11:26
比如输入:“1+2/4=”,程序就输出1.50(结果保留两位小数)
- 输入
- 第一行输入一个整数n,共有n组测试数据(n<10)。
每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。
数据保证除数不会为0 - 输出
- 每组都输出该组运算式的运算结果,输出结果保留两位小数。
- 样例输入
21.000+2/4=((1+2)*5+1)/4=
- 样例输出
1.504.00
#include<bits/stdc++.h>#include<stack>const int MAX=10005;using namespace std;char pp[MAX];//存储转换后的后缀表达式void trans(char *str)//将中缀表达式转换后缀表达式{ stack<char>ss; int i,j; i=0; j=0; while(str[i]!='=') { if(str[i]=='(') { ss.push(str[i]); } else if(str[i]==')') { while(ss.top()!='(') { pp[j++]=ss.top(); ss.pop(); } ss.pop(); } else if(str[i]=='+'||str[i]=='-') { while(!ss.empty()&&ss.top()!='(') { pp[j++]=ss.top(); ss.pop(); } ss.push(str[i]); } else if(str[i]=='*'||str[i]=='/') { while((!ss.empty()&&ss.top()=='*')||(!ss.empty()&&ss.top()=='/')) { pp[j++]=ss.top(); ss.pop(); } ss.push(str[i]); } else if(str[i]==' ') { i++; continue; } else { while((str[i]>='0'&&str[i]<='9')||str[i]=='.') { pp[j++]=str[i]; i++; } i--; pp[j++]='='; } i++; } while(!ss.empty()) { pp[j++]=ss.top(); ss.pop(); } pp[j]='=';// for(int k=0; k<=j; k++)//输出转化后的后缀表达式// {// printf("%c",pp[k]);// }// printf("\n");}void compvalue()//计算后缀表达式的值{ double d,d1; stack<double>mm; int i; i=0; while(pp[i]!='=') { if(pp[i]=='+') { double r=mm.top(); mm.pop(); double l=mm.top(); mm.pop(); double result=l+r; mm.push(result); } else if(pp[i]=='-') { double r=mm.top(); mm.pop(); double l=mm.top(); mm.pop(); double result=l-r; mm.push(result); } else if(pp[i]=='*') { double r=mm.top(); mm.pop(); double l=mm.top(); mm.pop(); double result=l*r; mm.push(result); } else if(pp[i]=='/') { double r=mm.top(); mm.pop(); double l=mm.top(); mm.pop(); double result=l/r; mm.push(result); } else { d=0; d1=0; while(pp[i]>='0'&&pp[i]<='9') { d=10*d+pp[i]-'0'; i++; } if(pp[i]=='.') { i++; double f=0; while(pp[i]>='0'&&pp[i]<='9') { f=f+1; d1+=(pp[i]-'0')*(double)(1/(pow(10,f))); i++; } } d=d+d1; mm.push(d); } i++; } printf("%.2lf\n",mm.top());}int main(){ char str[MAX]; int n; scanf("%d\n",&n); while(n--) { gets(str); trans(str); compvalue(); } return 0;}
0 0
- nyist 35 表达式求值
- nyist 35 表达式求值(后缀表达式)
- nyist 305 表达式求值
- nyist 305 表达式求值 (递归)
- nyist 1272 表达式求值 (河南省第九届省赛) 中缀转后缀
- NYOJ 35 表达式求值
- NYOJ 35表达式求值
- NYOJ-35-表达式求值
- nyoj 35 表达式求值
- NYOJ 35 表达式求值
- NYOJ 35 表达式求值
- NYOJ 35-表达式求值
- nyoj 35 表达式求值
- NYOJ 35表达式求值
- NYOJ-35 表达式求值
- NYOJ 35 表达式求值
- NYOJ 35 表达式求值
- nyoj 35 表达式求值
- Atitit 判断判断一张图片是否包含另一张小图片
- 控件设置背景色 以及 QPushButton 隐藏边框
- 商城之商品列表
- HDU 1814 Peaceful Commission(2-SAT)
- hdu5521Meeting/2015acmicpc沈阳3号题(图论最短路)
- nyist 35 表达式求值
- 1.Nexus安装与配置
- 智能家居项目(1):软件开发流程
- 第二十期 U-Boot添加web failsafe功能《路由器就是开发板》
- 千里之行始于足下
- Make和Makefile
- cocos2d-x-3.2 利用cocos.py创建项目
- Java输入输出流详解
- 【最小生成树】