import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static int location = 0;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
String str = in.nextLine();
System.out.print(compute(str));
}
public static int compute(String str){
int length = str.length();
int num = 0;
char flag = '+';
ArrayList<Double> list = new ArrayList<>();
while(location < length){
if(str.charAt(location) == '{' || str.charAt(location) == '('|| str.charAt(location) == '['){
//如果表达式中含有括号,则单独对括号中的内容进行运算
location++;
num = compute(str);
}
while(location < length && str.charAt(location) >= '0' && str.charAt(location) <= '9'){
//提取出表达式中的数字
num = num*10 + (str.charAt(location) - '0');
location++;
}
switch(flag){
//四则运算,先乘除后加减
//如果有加减运算,则等无乘除运算后在求解
case '+' : {
list.add((double)num);
break;
}
//将-修改为+号,最终是所有数求和
case '-' : {
list.add((double)-num);
break;
}
//如果有乘除运算,则直接运算
case '*' : {
double temp = list.remove(list.size() - 1);
temp *= (double)num;
list.add(temp);
break;
}
case '/' : {
double temp = list.remove(list.size() - 1);
temp /= (double)num;
list.add(temp);
break;
}
}
num = 0;
if(location == length) break;
flag = str.charAt(location);
if(str.charAt(location) == '}' || str.charAt(location) == ')'|| str.charAt(location) == ']'){
//遇到右侧括号,则表示当前层级求解已经结束
location++;
break;
}
location++;
}
// 最终剩余的表达式没有括号,只有加法运算
int sum = 0;
for(double i : list)sum+=i;
return sum;
}
}
评论区递归解法的Java版本



京公网安备 11010502036488号