表达式求值
来源:互联网 发布:站长站源码 编辑:程序博客网 时间:2024/06/06 03:30
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=8
本题主要是对栈的运用,摘自网友的程序
import java.text.DecimalFormat;import java.util.Scanner;import java.util.Stack;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); DecimalFormat d = new DecimalFormat(".00"); int num = sc.nextInt(); for (int i = 0; i < num; ++i) { String s = sc.next(); s = s.substring(0, s.length() - 1); System.out.println(d.format(f(s))); } sc.close(); } private static double f(String s) { Stack<Double> data = new Stack<Double>(); Stack<Character> chara = new Stack<Character>(); StringBuilder sb = new StringBuilder(); boolean hasNum = false; for (int i = 0; i < s.length(); ++i) { char ch = s.charAt(i); if ((ch == '.') || ((ch >= '0') && (ch <= '9'))) { hasNum = true; sb.append(ch); continue; } if (hasNum) { hasNum = false; data.push(Double.valueOf(sb.toString())); sb = new StringBuilder(); } if (chara.isEmpty()) { chara.push(ch); continue; } if (level(chara.peek()) == 4) { if (level(ch) == 1) { chara.pop(); } else { chara.push(ch); } } else if (level(chara.peek()) >= level(ch)) { data.add(g(data.pop(), data.pop(), chara.pop())); --i; } else { chara.push(ch); } } if (!sb.toString().equals("")) { data.push(Double.valueOf(sb.toString())); } while (!chara.isEmpty()) data.add(g(data.pop(), data.pop(), chara.pop())); return data.pop(); } private static int level(char ch) { int result = 0; switch (ch) { case '(': result = 4; break; case '*': result = 3; break; case '/': result = 3; break; case '+': result = 2; break; case '-': result = 2; break; case ')': result = 1; } return result; } private static double g(double b, double a, char ch) { double result = 0; switch (ch) { case '+': result = a + b; break; case '-': result = a - b; break; case '*': result = a * b; break; case '/': result = a / b; } return result; }}
0 0
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 剑指offer--面试题24: 二叉搜索树的后序遍历序列
- curl命令
- 条件筛选([尚硅谷]_张晓飞_Mybatis 学习笔记五)
- 一、二级缓存([尚硅谷]_张晓飞_Mybatis 学习笔记六)
- [尚硅谷例题]_pl_sql
- 表达式求值
- jquery跨域办法
- solr测试项目(下)--索引数据与查询
- <pre>标签学习
- TSM是NFC应用发展的关键环节
- Java-面向对象(高级篇)--继承的进一步研究
- 总结eclipse中安装maven插件
- JS 阻止键盘输入event.preventDefault 和window.event.returnValue
- <select>标签学习