java四则运算表达式不包含括号
2013-09-11 10:13
651 查看
题目描述
小明,幼儿园小班学生。
爸爸:小明,1+1等于几呀?
小明:嗯...... 等于 2。
爸爸: 太棒了。那1+1+2等于几呀?
小明:不知道,老师没教......
可伶的小明,小小年纪就要计算这么“复杂”的运算了。为了帮助小明,请你设计并实现一个程序,能够自动计算出式子结果。
小明会请你吃棒棒糖的。^_^
规则1:实现 +、-、X、/ 四则运算,数据仅包含整数,不考虑计算结果溢出的情况
规则2:程序仅需要实现类似"a + b * c / d -e" 这种类型字符串的计算,式子中操作符的个数不超过10个。其他复杂情况不考虑。
例子1:
输入: 1 + 2
输出: 3
输入: 1 + 2 * 3 - 4 / 2
输出: 5
输入
2 + 2 * 3 / 2 - 1
输出
4
样例输入
10*100-3
样例输出
997
package com.compare;
import java.util.Stack;
public class GetCompareResult {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String result=getResult("1+2*300-40/2");
System.out.println(result);
}
public static String getResult(String input){
String result="";
Stack<String> stack=new Stack<String>();
Stack<String> digtalstack=new Stack<String>();
Stack<String> symbolstack=new Stack<String>();
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (Character.isDigit(c)) {
if (!stack.isEmpty()) {
String temp = stack.peek();
if (temp.equals("+") || temp.equals("-")
|| temp.equals("*") || temp.equals("/")) {
stack.push(String.valueOf(c));
} else {
String temp1 = stack.pop();
String temp2 = temp1 + String.valueOf(c);
stack.push(temp2);
}
} else {
stack.push(String.valueOf(c));
}
} else {
stack.push(String.valueOf(c));
}
}
System.out.println(stack);
while(!stack.isEmpty()){
String temp1=stack.pop();
if(temp1.equals("+")||temp1.equals("-")||temp1.equals("*")||temp1.equals("/")){
symbolstack.push(temp1);
}else{
if(digtalstack.isEmpty()){
digtalstack.push(temp1);
}else{
if(!symbolstack.isEmpty()){
String temp2=symbolstack.peek();
if(temp2.equals("*")){
String temp3=digtalstack.pop();
symbolstack.pop();
int d=Integer.parseInt(temp3);
int e=Integer.parseInt(temp1);
digtalstack.push(String.valueOf(d*e));
}else if(temp2.equals("/")){
String temp4=digtalstack.pop();
symbolstack.pop();
int d=Integer.parseInt(temp4);
int e=Integer.parseInt(temp1);
digtalstack.push(String.valueOf(e/d));
}else{
digtalstack.push(temp1);
}
}
}
}
}
System.out.println(digtalstack);
System.out.println(symbolstack);
while(!digtalstack.isEmpty()){
String temp1=digtalstack.pop();
if(!symbolstack.isEmpty()){
String temp=symbolstack.pop();
if(temp.equals("+")){
String temp2=digtalstack.pop();
int d=Integer.parseInt(temp1);
int e=Integer.parseInt(temp2);
digtalstack.push(String.valueOf(d+e));
}else{
String temp2=digtalstack.pop();
int d=Integer.parseInt(temp1);
int e=Integer.parseInt(temp2);
digtalstack.push(String.valueOf(d-e));
}
}else{
result+=temp1;
}
}
return result;
}
}
小明,幼儿园小班学生。
爸爸:小明,1+1等于几呀?
小明:嗯...... 等于 2。
爸爸: 太棒了。那1+1+2等于几呀?
小明:不知道,老师没教......
可伶的小明,小小年纪就要计算这么“复杂”的运算了。为了帮助小明,请你设计并实现一个程序,能够自动计算出式子结果。
小明会请你吃棒棒糖的。^_^
规则1:实现 +、-、X、/ 四则运算,数据仅包含整数,不考虑计算结果溢出的情况
规则2:程序仅需要实现类似"a + b * c / d -e" 这种类型字符串的计算,式子中操作符的个数不超过10个。其他复杂情况不考虑。
例子1:
输入: 1 + 2
输出: 3
输入: 1 + 2 * 3 - 4 / 2
输出: 5
输入
2 + 2 * 3 / 2 - 1
输出
4
样例输入
10*100-3
样例输出
997
package com.compare;
import java.util.Stack;
public class GetCompareResult {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String result=getResult("1+2*300-40/2");
System.out.println(result);
}
public static String getResult(String input){
String result="";
Stack<String> stack=new Stack<String>();
Stack<String> digtalstack=new Stack<String>();
Stack<String> symbolstack=new Stack<String>();
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (Character.isDigit(c)) {
if (!stack.isEmpty()) {
String temp = stack.peek();
if (temp.equals("+") || temp.equals("-")
|| temp.equals("*") || temp.equals("/")) {
stack.push(String.valueOf(c));
} else {
String temp1 = stack.pop();
String temp2 = temp1 + String.valueOf(c);
stack.push(temp2);
}
} else {
stack.push(String.valueOf(c));
}
} else {
stack.push(String.valueOf(c));
}
}
System.out.println(stack);
while(!stack.isEmpty()){
String temp1=stack.pop();
if(temp1.equals("+")||temp1.equals("-")||temp1.equals("*")||temp1.equals("/")){
symbolstack.push(temp1);
}else{
if(digtalstack.isEmpty()){
digtalstack.push(temp1);
}else{
if(!symbolstack.isEmpty()){
String temp2=symbolstack.peek();
if(temp2.equals("*")){
String temp3=digtalstack.pop();
symbolstack.pop();
int d=Integer.parseInt(temp3);
int e=Integer.parseInt(temp1);
digtalstack.push(String.valueOf(d*e));
}else if(temp2.equals("/")){
String temp4=digtalstack.pop();
symbolstack.pop();
int d=Integer.parseInt(temp4);
int e=Integer.parseInt(temp1);
digtalstack.push(String.valueOf(e/d));
}else{
digtalstack.push(temp1);
}
}
}
}
}
System.out.println(digtalstack);
System.out.println(symbolstack);
while(!digtalstack.isEmpty()){
String temp1=digtalstack.pop();
if(!symbolstack.isEmpty()){
String temp=symbolstack.pop();
if(temp.equals("+")){
String temp2=digtalstack.pop();
int d=Integer.parseInt(temp1);
int e=Integer.parseInt(temp2);
digtalstack.push(String.valueOf(d+e));
}else{
String temp2=digtalstack.pop();
int d=Integer.parseInt(temp1);
int e=Integer.parseInt(temp2);
digtalstack.push(String.valueOf(d-e));
}
}else{
result+=temp1;
}
}
return result;
}
}
相关文章推荐
- java中正则表达式用Pattern计算字符串的结果(四则运算);分成有括号和没括号;当然也可以采用逆波兰式
- 中缀表达式的计算(只包含四则运算与括号)
- (java) 四则运算(包含分数)
- Java实现四则运算计算器(支持括号,小数,负数)
- Java实现四则运算表达式计算
- 计算带括号的四则运算表达式
- 栈的应用--四则运算表达式求值(java代码)
- Java 四则运算表达式求解
- 面试题 简单的字符串表达式四则运算(不考虑括号)
- java 四则运算,并可完成 自定义函数 表达式 功能
- Java四则运算表达式求解
- java 解析四则混合运算表达式并计算结果
- C++ 四则运算表达式(简单的+-*/带括号) 栈
- 在Java中计算四则运算表达式字符串的值
- 带括号的四则运算表达式的求值(栈实现)
- 栈的应用--四则运算表达式求值(java语言)
- Java 四则运算表达式求解
- 带括号的四则混合运算的算符优先算法java实现
- 计算带括号的四则运算表达式,这个实现方式你想过吗?
- 如何处理加括号的四则混合运算表达式——基于二叉树的实现(Eclipse平台 Java版)