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

奇怪的表达式求值--网易2017春招实习笔试编程题8

2017-08-14 11:48 357 查看
时间限制:1秒

空间限制:32768K

常规的表达式求值,我们都会根据计算的优先级来计算。比如*/的优先级就高于+-。但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法,意味着表达式中没有/,只有(+, - 和 *)。现在给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值为多少 
输入描述:
输入为一行字符串,即一个表达式。其中运算符只有-,+,*。参与计算的数字只有0~9.
保证表达式都是合法的,排列规则如样例所示。


输出描述:
输出一个数,即表达式的值


输入例子1:
3+5*7


输出例子1:
56


import java.util.Scanner;
import java.util.Stack;

public class Main {
public int calculate(String s) {
Stack<Integer> nums = new Stack<Integer>();
Stack<Character> operators = new Stack<Character>();
char[] c = s.toCharArray();
for (int i = c.length - 1; i >= 0; i--) {
if (c[i] == '+' || c[i] == '-' || c[i] == '*') {
operators.push(c[i]);
} else if (c[i] >= '0' && c[i] <= '9') {
nums.push(c[i] - '0');
}
}
Integer a = null;
Integer b = null;
Character operator = null;
while (!nums.empty() && !operators.empty()) {
a = nums.pop();
b = nums.pop();
operator = operators.pop();
if (operator == '+')
nums.push(a + b);
else if (operator == '-')
nums.push(a - b);
else if (operator == '*')
nums.push(a * b);
}
return nums.pop();//最后,数字栈中有一个表达式的结果值,操作符栈已空
}//calculate

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
System.out.println(new Main().calculate(s));
sc.close();
}//main
}
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例

用两个栈实现,一个存放数据和临时运算的结果,一个存放操作符,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息