面试题 16.26. 计算器

题目描述:

给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。

表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格  。 整数除法仅保留整数部分。

示例1:

输入:"3+2*2"

输出:7

示例2:

输入:"3/2"

输出:1

示例3:

输出:"3+5/2"

输出:5

说明:

1、你可以假设所给定的表达式都是有效的。

2、请不要使用内置的库函数eval。


import java.util.Stack;

public class osts {

    public int calculate(String s) {

        s = s.trim();

        int sign=1;  //sign表示加减符号

        int msign=0; //msign表示乘除符号,1表示乘法,-1表示除法,0表示不操作

        int num=0;

        int len=s.length();

        Stack stack=new Stack<>();

        for(int i=0;i<len;i++){

            char ch=s.charAt(i);

            if(Character.isDigit(ch)){

                num=ch-'0';

                while(i+1<len&&Character.isDigit(s.charAt(i+1)))

                    num=num*10+s.charAt(++i)-'0';

                if(msign==1)//乘法

                {

                    stack.push(stack.pop()*num);

                    msign=0;

                }

                else if(msign==-1)//除法

                {

                    stack.push(stack.pop()/num);

                    msign=0;

                }

                else                //加减

                    stack.push(sign*num);

            }

            else if(ch=='+')

                sign=1;

            else if(ch=='-')

                sign=-1;

            else if(ch=='*')

            {

                msign=1;

            }

            else if(ch=='/')

                msign=-1;

        }

        int res=0;

        while(!stack.isEmpty())

            res+=stack.pop();

        return res;

    }

    public static void main(String[] args){

        String s ="3+5/2";

        osts osc=new osts();

        System.out.println(osc.calculate(s));

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容