题解 | #四则运算#抄大佬题解

四则运算

http://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String s=sc.nextLine();
        int n=s.length();
        int num1=0;
        int o1=1;
        int num2=1;
        int o2=1;
        Stack<Integer> stack=new Stack<>();
        for(int i=0;i<n;i++){
            char c=s.charAt(i);
            //遇到数字
            if(Character.isDigit(c)){
                int cur=0;
                while(i<n && Character.isDigit(s.charAt(i))){
                    cur=cur*10+(s.charAt(i)-'0');
                    i++;
                }
                i--;
                num2=o2==1?num2*cur:num2/cur;
            }
            //遇到*,/号(是乘号就是1,是除号就是-1)
            else if(c=='*' || c=='/'){
                o2=c=='*'?1:-1;
            }
            //遇到左括号,保存当前结果并且进行初始化
            else if(c=='(' || c=='[' || c=='{'){
                 stack.push(num1);
                 stack.push(o1);
                 stack.push(num2);
                 stack.push(o2);
                
                num1=0;
                o1=1;
                num2=1;
                o2=1;
            }
            //遇到+,-号,说明可以计算,计算num1并且定义其他几个变量
            else if(c=='+' || c=='-'){
                if(c=='-' && (i==0 || s.charAt(i-1)=='(' || s.charAt(i-1)=='[' || s.charAt(i-1)=='{')){
                    o1=-1;
                    continue;
                }
                num1=num1+o1*num2;
                o1=c=='+'?1:-1;
                num2=1;
                o2=1;
            }
            //遇到右括号,出栈,并计算num2
            else{
                int cur=num1+o1*num2;
                o2=stack.pop();
                num2=stack.pop();
                o1=stack.pop();
                num1=stack.pop();
                num2=o2==1?num2*cur:num2/cur;
            }
        }
        System.out.println(num1+o1*num2);
    }
}
全部评论
debug总算看懂了
点赞 回复 分享
发布于 2022-12-15 17:32 四川

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务