解决问题本身就是递归形式
波兰式定义:
1)一个数是波兰式,值为该数
2)“运算符 波兰式 波兰式”是波兰式,值是两个波兰式运算的结果
表达式定义:
输入为四则运算表达式,仅由整数、 +、-、 *、 / 、 (、 )组成,没有空格,要求求其值。假设运算符结果都是整数。 "/"结果也是整数
题解
题解1:波兰式求值
import java.util.*;
public class Main {
public static double exp(){
String s;
Scanner sc = new Scanner(System.in);
s = sc.next().trim();
switch (s){
case "+":return exp()+exp();
case "-":return exp()-exp();
case "*":return exp()*exp();
case "/":return exp()/exp();
default: return Double.valueOf(s);
}
}
public static void main(String[] args){
System.out.println(exp());
}
}
题解2:表达式求值
import java.util.*;
public class Main {
public static String expression;
//表达式是由项term通过+-构成的,项term是由因子factor通过*/构成的。
public static int factorValue(){//求一个因子的值
int result = 0;
char c = expression.charAt(0);
if( c == '(') {
expression = expression.substring(1);
result = expressionValue();
expression = expression.substring(1);
}
else {
while(Character.isDigit(c)) {
result = 10 * result + c - '0';
expression = expression.substring(1);
if(expression==null||expression.length()==0) break;
c = expression.charAt(0);
}
}
return result;
}
public static int termValue(){//求一个项的值
int result = factorValue(); //求第一个因子的值
while(true) {
if(expression==null||expression.length()==0) break;
char op = expression.charAt(0);
if( op == '*' || op == '/') {
expression = expression.substring(1);
int value = factorValue();
if( op == '*')
result *= value;
else result /= value;
}
else
break;
}
return result;
}
public static int expressionValue(){//求一个表达式的值
int result = termValue(); //求第一项的值
boolean more = true;
while(more) {
if(expression==null||expression.length()==0) break;
char op = expression.charAt(0); //看一个字符,不取走
if( op == '+' || op == '-' ) {
expression = expression.substring(1); //从输入中取走一个字符
int value = termValue();
if( op == '+' ) result += value;
else result -= value;
}
else more = false;
}
return result;
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
expression = scanner.next().trim();
System.out.println(expressionValue());
}
}