博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构--栈的应用(表达式求值 nyoj 35)
阅读量:4589 次
发布时间:2019-06-09

本文共 2386 字,大约阅读时间需要 7 分钟。

题目链接:

题目:

                    表达式求值

                时间限制:3000 ms | 内存限制:65535 KB
描述
  ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出它的值的计算器,现在请你帮助他来实现这个计算器吧。比如输入:“1+2/4=”,程序就输出1.50(结果保留两位小数)
输入
  第一行输入一个整数n,共有n组测试数据(n<10)。
每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。
数据保证除数不会为0
输出
  每组都输出该组运算式的运算结果,输出结果保留两位小数。
样例输入
2
1.000+2/4=
((1+2)*5+1)/4=
样例输出
1.50
4.00

思路:用栈模拟数的四则运算;初始化各种运算符之间的优先级;

代码如下:

 

1 #include "stdio.h" 2 #include "string.h" 3 #include "stack" 4 using namespace std; 5  6 #define N 2005 7  8 char str[N]; 9 int OPS[256];10 char table[8][8]={
">><<<>>",">><<<>>",">>>><>>",">>>><>>","<<<<<=<",">>>>>>>","<<<<<<="};11 //上面语句定义了操作符之间的优先级,从0~6依次为+-*/()=七种运算符12 13 double Calculate(char ch,double x1,double x2) 14 {15 if(ch=='+')16 return x1+x2;17 else if(ch=='-')18 return x1-x2;19 else if(ch=='*')20 return x1*x2;21 else if(ch=='/')22 return x1/x2;23 }24 25 int main()26 {27 int T;28 int i,j;29 int len;30 memset(OPS,-1,sizeof(OPS));31 OPS['+'] = 0;32 OPS['-'] = 1;33 OPS['*'] = 2;34 OPS['/'] = 3;35 OPS['('] = 4;36 OPS[')'] = 5;37 OPS['='] = 6;38 scanf("%d",&T);39 getchar();40 while(T--)41 {42 scanf("%s",str+1);43 str[0] = '=';44 stack
q; //操作数栈45 stack
t; //操作符栈46 len = strlen(str);47 for(i=0; i
') //前一个操作符先执行,则先执行前一个操作符,再加入这个操作符73 {74 double x2 = q.top(); 75 q.pop();76 double x1 = q.top(); 77 q.pop();78 char ch = t.top(); 79 t.pop();80 double x = Calculate(ch,x1,x2); //运算这两个数81 q.push(x);82 }83 else if(table[OPS[ch1]][OPS[ch2]]=='<') //前一个操作符后执行,则直接将当期这个操作如入栈84 t.push(str[i++]);85 else if(table[OPS[ch1]][OPS[ch2]]=='=') //'='的情况表示括号对,后者等号对,将这两个操作符都消去。86 t.pop(), i++;87 }88 }89 }90 printf("%.2lf\n",q.top());91 q.pop();92 }93 return 0;94 }

 

 

 

 

转载于:https://www.cnblogs.com/ruo-yu/p/4411944.html

你可能感兴趣的文章
Wireless Network 并查集
查看>>
51nod 1019 逆序数
查看>>
ubuntu 16 64位编译安装php
查看>>
架构之美01
查看>>
Web负载均衡
查看>>
SQL Server用表组织数据
查看>>
连接H3C交换机的Console口连不上
查看>>
test
查看>>
事件捕获与冒泡的再探
查看>>
easyUI文本框获得焦点,失去焦点
查看>>
Mariadb安装
查看>>
Java的native方法
查看>>
php_l3arning_notes_0
查看>>
在GROUP BY中"做文章"(五种中简答方法!)
查看>>
基础html页面结构
查看>>
新征程~起航!
查看>>
STL priority实例
查看>>
koa2-2
查看>>
GCD倒计时
查看>>
python基础总结(4)
查看>>