1.简述:
描述
给定一个字符串描述的算术表达式,计算出结果值。
输入字符串长度不超过 100 ,合法的字符包括 ”+, -, *, /, (, )” , ”0-9” 。
数据范围:运算过程中和最终结果均满足 |val| \le 2^{31}-1 \∣val∣≤231−1 ,即只进行整型运算,确保输入的表达式合法
输入描述:
输入算术表达式
输出描述:
计算出结果值
示例1
输入:
400+5复制输出:
4052.代码实现:
import java.util.*;
public class Main{
    public static void main(String[] srgs){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String str = sc.nextLine();
            process(str);
        }
    }
    
    public static void process(String str){
        String s1 = str.replace("[","(");
        String s2 = s1.replace("]",")");
        String s3 = s2.replace("{","(");
        String s4 = s3.replace("}",")");
        int res = solve(s4);
        System.out.println(res);
    }
    
    public static int solve(String s){
        if(s==null||s.length()==0) return 0;
        Stack<Integer> stack = new Stack<>();
        char[] chs = s.toCharArray();
        int len = s.length(), number=0;
        char sign = '+';
        for(int i=0;i<len;i++){
            char c = chs[i];
            if(c==' ') continue;
            if(Character.isDigit(c)){
                number = number*10 + c-'0';
            }
            if(c=='('){
                int j=i+1, count=1;
                while(count>0){
                    if(chs[j]==')') count--;
                    if(chs[j]=='(') count++;
                    j++;
                }
                number = solve(s.substring(i+1,j-1));
                i=j-1;
            }
            if(!Character.isDigit(c)||i==len-1){
                if(sign=='+'){
                    stack.push(number);
                }else if(sign=='-'){
                    stack.push(-1*number);
                }else if(sign=='*'){
                    stack.push(stack.pop()*number);
                }else if(sign=='/'){
                    stack.push(stack.pop()/number);
                }
                sign = c;
                number = 0;
            }
        }
        int ans = 0;
        while(!stack.isEmpty()){
            ans += stack.pop();
        }
        return ans;
    }
}









