题目描述
小明,幼儿园小班学生。
爸爸:小明,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;
}
}