nyoj35 表达式求值(栈)

网友投稿 284 2022-09-06

nyoj35 表达式求值(栈)

题目35​​题目信息​​​​运行结果​​​​本题排行​​​​讨论区​​

表达式求值

3000 ms  |  内存限制: 65535

4

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

以前碰到过这道题一直不想做。。。

今天学了数据结构看到了运算符优先级表 就做做。。。

import java.util.*;public class Main { public static void main(String args[]){ Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); while(n--!=0){ char []str=scanner.next().toCharArray(); cal(str); } } private static void cal(char[] str){ char []temp = new char[100]; Stack optr=new Stack(); Stack opnd=new Stack(); int k=0; optr.clear(); opnd.clear(); optr.add('='); for(int i=0;i><<<>>",">><<<>>",">>>><>>", ">>>><>>","<<<<<= ",">>>> >>","<<<<< ="}; int x,y; x=to_num(ch1); y=to_num(ch2); return (int)(oper[x].charAt(y)); } private static int to_num(char ch) { if(ch=='+') return 0; else if(ch=='-') return 1; else if(ch=='*') return 2; else if(ch=='/') return 3; else if(ch=='(') return 4; else if(ch==')') return 5; else if(ch=='=') return 6; else return -1; }}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何获得数据库中的数据库名,表名,字段名,字段个数
下一篇:nyoj 1242 Interference Signal (河南省第八届acm程序设计大赛)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~