Oro programador entrevista - preguntas de la entrevista 16.26 Calculadora (pila)

1. Tema

Dado un número entero positivo, más (+), restar (-), multiplicar (*), excepto expresión aritmética (/) (excepto en paréntesis), el resultado se calcula.

Expresión contiene no negativos enteros, sólo +, - ,*,/cuatro operandos y espacios. La división entera retener sólo la parte entera.

示例 1:
输入: "3+2*2"
输出: 7

示例 2:
输入: " 3/2 "
输出: 1

示例 3:
输入: " 3+5 / 2 "
输出: 5

说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。

Fuente: estancia botón (LeetCode)
enlace: https: //leetcode-cn.com/problems/calculator-lcci
propiedad de la deducción de todas las redes. reimpresión comercial póngase en contacto con la reimpresión autorizada oficial, no comercial por favor indique la fuente.

2. Resolución de Problemas

几个易错例子
"2147483647"
" 3+5 / 2 "
"+3+2*2"
"-3+2*2"
class Solution {
public:
    int calculate(string s) {
    	long a, sum, i = 0;
    	char op = '+';
        while(i < s.size() && s[i]==' ')
            i++;//处理空格
    	stack<int> stk;
    	if(i < s.size() && s[i] == '+')
    		i++;
    	else if(i < s.size() && s[i] == '-')
    	{
    		op = '-';
    		i++;
    	}
    	for( ; i < s.size(); ++i)
    	{
    		a = 0;
            while(i < s.size() && s[i]==' ')
                i++;//处理空格
    		while(i < s.size() && isdigit(s[i]))
    			a = a*10+s[i++]-'0';
			if(op == '*')
    		{	
    			a = stk.top() * a;
    			stk.pop();
    			sum = 0;
    			while(!stk.empty())
    			{
    				sum += stk.top();
    				stk.pop();
    			}
    			stk.push(sum);
    			stk.push(a);
    		}
    		else if(op == '/')
    		{	
    			a = stk.top() / a;
    			stk.pop();
    			sum = 0;
    			while(!stk.empty())
    			{
    				sum += stk.top();
    				stk.pop();
    			}
    			stk.push(sum);
    			stk.push(a);
    		}
    		else if(op == '-')
    			stk.push(-a);
    		else
    			stk.push(a);
            while(i < s.size() && s[i]==' ')
                i++;//处理空格
    		if(i < s.size())
    			op = s[i];
    	}
    	sum = 0;
    	while(!stk.empty())
    	{
    		sum += stk.top();
    		stk.pop();
    	}
    	return sum;
    }
};

20 ms 8,8 MB

Publicados 807 artículos originales · ganado elogios 1552 · Vistas de 380.000 +

Supongo que te gusta

Origin blog.csdn.net/qq_21201267/article/details/105314775
Recomendado
Clasificación