您的位置:首页 > 编程语言 > Java开发

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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: