字符串应用(计算器)

    科技2024-06-02  75

    给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式 (括号除外),计算其结果。 表达式仅包含非负整数,+-*/ 四种运算符和空格。 整数除法仅保留整数部分。 示例: 输入: "3+2*2" 输出: 7 答案: //思路 1.碰到数字直接入栈 2.碰到空格,直接下一步 3.碰到 + - * / 碰到+ 下一个数字直接入栈 碰到- -num入栈(num=-num) 碰到* 弹出上个数字相乘后入栈(num = stack.pop() * num) 碰到/ num = stack.pop() / num入栈 class Solution { public int calculate(String s) { char[] cs=s.trim().toCharArray(); //trim方法 去掉首尾空格 Stack<Integer> st = new Stack(); int i=0,ans=0; while(i<cs.length) { if(cs[i]==' ') { i++; continue; } char tmp = cs[i]; if(tmp == '+' || tmp == '-' || tmp == '*' || tmp == '/') { i++; while(i<cs.length && cs[i]==' ') i++; } int num=0; while(i<cs.length && Character.isDigit(cs[i])) { num = num*10 + cs[i] - '0'; //字符串减去‘0’ 可以字符转换为数字 i++; } switch(tmp){ case '-': num=-num; break; case '*': num=st.pop()*num; break; case '/': num=st.pop()/num; break; default: break; } st.push(num); } while(!st.isEmpty())//把栈中的数字相加 { ans+=st.pop(); } return ans; } }
    Processed: 0.010, SQL: 8