nyoj35表达式求值
2015-08-05 20:23
435 查看
/*注意各个符号的优先级,建议看懂符号的优先级后在看代码。有助于你理解:以下为代码*/
#include<stdio.h>
#include<string.h>
#include<stack>
#include<algorithm>
#include<stdlib.h>
using namespace std;
double zhao1(double a,char op,double b)
{
switch(op)
{
case '+':return a+b;break;
case '-':return a-b;break;
case '*':return a*b;break;
case '/':return a/b;break;
}
}
char zhao2(char c1,char c2)
{
if(c1=='+'||c1=='-')
{
if(c2=='*'||c2=='/'||c2=='(')
return '<';
else
return '>';
}
if(c1=='*'||c1=='/')
{
if(c2=='(')
return '<';
else
return '>';
}
if(c1=='('||c1=='=')
{
if(c1=='('&&c2==')'||c1=='='&&c2=='=')
return '=';
else
return '<';
}
}
int main()
{
int T,k,i;
bool flag;
double x,y;
scanf("%d",&T);
while(T--)
{
char a[1000],t[1000],op;
scanf("%s",a);
stack<double> num;
stack<char> ch;
ch.push('=');
flag=false,k=0;
for(i=0;a[i]!='\0';)
{
if(a[i]>='0'&&a[i]<='9'||a[i]=='.')
{
t[k++]=a[i++];
flag=true;
continue;
}
if(flag)
{
t[k]='\0';
num.push(atof(t));
flag=false;
k=0;
}
switch(zhao2(ch.top(),a[i]))
{
case '<':ch.push(a[i]),i++;break;
case '=':ch.pop(),i++;break;
case '>':
y=num.top(),num.pop();
x=num.top(),num.pop();
op=ch.top(),ch.pop();
num.push(zhao1(x,op,y));
}
}
printf("%.2lf\n",num.top());
}
return 0;
}
#include<stdio.h>
#include<string.h>
#include<stack>
#include<algorithm>
#include<stdlib.h>
using namespace std;
double zhao1(double a,char op,double b)
{
switch(op)
{
case '+':return a+b;break;
case '-':return a-b;break;
case '*':return a*b;break;
case '/':return a/b;break;
}
}
char zhao2(char c1,char c2)
{
if(c1=='+'||c1=='-')
{
if(c2=='*'||c2=='/'||c2=='(')
return '<';
else
return '>';
}
if(c1=='*'||c1=='/')
{
if(c2=='(')
return '<';
else
return '>';
}
if(c1=='('||c1=='=')
{
if(c1=='('&&c2==')'||c1=='='&&c2=='=')
return '=';
else
return '<';
}
}
int main()
{
int T,k,i;
bool flag;
double x,y;
scanf("%d",&T);
while(T--)
{
char a[1000],t[1000],op;
scanf("%s",a);
stack<double> num;
stack<char> ch;
ch.push('=');
flag=false,k=0;
for(i=0;a[i]!='\0';)
{
if(a[i]>='0'&&a[i]<='9'||a[i]=='.')
{
t[k++]=a[i++];
flag=true;
continue;
}
if(flag)
{
t[k]='\0';
num.push(atof(t));
flag=false;
k=0;
}
switch(zhao2(ch.top(),a[i]))
{
case '<':ch.push(a[i]),i++;break;
case '=':ch.pop(),i++;break;
case '>':
y=num.top(),num.pop();
x=num.top(),num.pop();
op=ch.top(),ch.pop();
num.push(zhao1(x,op,y));
}
}
printf("%.2lf\n",num.top());
}
return 0;
}
相关文章推荐
- 【JAVA基础】JAVA中分包的规范
- Ubuntu14.04安装NVIDIA显卡驱动
- poj1321(深搜)
- zoj 2734 Exchange Cards
- Android studio 取消language injection
- nginx 进行外网地址屏蔽
- 【华为oj】提取不重复的整数
- xml实现rss订阅
- C#操作SQLite数据库帮助类——SQLiteHelper
- 电容标识
- hdoj 1379 DNA Sorting【排序】
- 新浪微博简记
- php调用SQL SERVER 2008及以上版本的方法
- 读书笔记--大话设计模式
- ESP定律和堆栈平衡
- 设计模式之简单工厂模式;
- tomcat配置虚拟目录映射
- Yii 1.x IOS推送
- ANDROID 获取时间格式
- CC攻击原理学习笔记