java四则运算表达式不包含括号

题目描述

小明,幼儿园小班学生。

爸爸:小明,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;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值