首页 > 试题广场 >

计算器(一)

[编程题]计算器(一)
  • 热度指数:1856 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个字符串形式的表达式 s ,请你实现一个计算器并返回结果。

数据范围:表达式长度满足 ,字符串中包含 + , -  , ( , ) ,保证表达式合法。
示例1

输入

"1+2"

输出

3
示例2

输入

"1-1"

输出

0
示例3

输入

"-0"

输出

0
通过符号把减法看作加上负数的加法来做:(1) 遇到数字时计算数字;(2) 遇到运算符时累加结果;(3) 遇到左括号时把当前计算出来的结果和符号压栈,并清空当前的计算结果,转而计算括号内的表达式;(4) 遇到右括号时弹栈计算。
注意在每次的计算操作时,需要把当前的数字归零,下次遇到数字字符时重新累加。
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return int整型
     */
    public int calculate (String s) {
        // write code here
        Stack<Integer> stack= new Stack();
        int res = 0;
        int num = 0;
        int sign = 1;
        for(int i = 0; i < s.length(); i++){
            char c = s.charAt(i);
            if(c >= '0' && c <= '9'){
                num = num * 10 + (c - '0');
            }else if(c == '+'){
                res += sign * num;
                num = 0;
                sign = 1;
            }else if(c == '-'){
                res += sign * num;
                num = 0;
                sign = -1;
            }else if(c == '('){
                stack.push(res);
                stack.push(sign);
                sign = 1;
                res = 0;
            }else if(c == ')'){
                res += sign * num;
                num = 0;
                res *= stack.pop();
                res += stack.pop();
            }
        }
        if(num != 0){
            res += sign * num;
        }
        return res;
    }
}

发表于 2021-12-22 22:26:14 回复(0)
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return int整型
     */
    int calculate(string s) {
        // write code here
        stack<int> sign;
        int res = 0 , tmp = 0 , sig =1;
        sign.push(sig);
        for(auto &it : s){
            if(it >= '0' and it <='9') tmp = tmp*10+(it-'0');
            else{
                res += tmp*sig , tmp = 0;
                switch(it){
                    case '+':
                        sig = sign.top();
                        break;
                    case '-':
                        sig = -sign.top();
                        break;
                    case '(':
                        sign.push(sig);
                        break;
                    default:
                        sign.pop();
                        break;
                        
                }
            }
        }
        res  += sig *tmp;
        return res;
    }
};

发表于 2022-07-19 09:15:58 回复(0)

问题信息

难度:
2条回答 2224浏览

热门推荐

通过挑战的用户

查看代码