- 题目
- 思路
求值优先级:括号> */ >±
故可递归从低到高调用,整数可以看作一个单独的括号值
- 实现
package 蓝桥;
import java.util.Scanner;
public class InfixExp {
static char[] exp;
static int i=0;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
exp=sc.nextLine().toCharArray();
System.out.println(sum());
}
static int sum() {
int result=mass();
boolean more=true;
while(more) {
char op=exp[i];
if(op=='+'|op=='-') {
i++;
int value=mass();
if(op=='+') result+=value;
else result-=value;
}
else more=false;
}
return result;
}
static int mass() {
int result=expression();
while(true) {
char op=exp[i];
if(op=='*'|op=='/') {
i++;
int value=expression();
if(op=='*') result*=value;
else if(op=='/'& value!=0) result/=value;
}
else break;
}
return result;
}
static int expression() {
int result=0;
char c=exp[i];
if(c=='(') {
i++;
result=sum();
if(i<exp.length-1) i++;
}
else {
while(Character.isDigit(c)&i<exp.length) {
result=10*result+Character.digit(c, 10);
if(i<exp.length-1) {
i++;
c=exp[i];
}
else break;
}
}
return result;
}
}
- 测试用例及结果