40pts

1 comments

  • @ 2025-3-3 13:27:30
    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int N = 1e5 + 10;
    const int INF = 0x3f3f3f3f;
    
    stack <int> number;
    stack <char> symbol;
    
    string str;
    int len, num;
    bool flag = false;
    
    int bank(char s)
    {
    	if (s == '+' or s == '-')
    		return 10;
    	else if (s == '*' or s == '/')
    		return 20;
    	else if (s == '^')
    		return 30;
    	return 0; 
    }
    
    void calc()
    {
    	int ans;
    	int b = number.top();  number.pop();
    	int a = number.top();  number.pop();
    	char s = symbol.top(); symbol.pop();
    	switch(s)
    	{
    		case '+':
    		{
    			ans = a + b;
    			break; 
    		}
    		case '-':
    		{
    			ans = a - b;
    			break;
    		}
    		case '*':
    		{
    			ans = a * b;
    			break;
    		}
    		case '/':
    		{
    			ans = a / b;
    			break;
    		}
    		case '^':
    		{
    			ans = pow(a, b);
    			break;
    		}
    	}
    	number.push(ans);
    }
    
    void printtt()
    {
    
    
    int main()
    {
    	cin >> str;
    	len = str.size();
    	for (int i = 0; i < len; i++)
    	{
    		if (str[i] >= '0' and str[i] <= '9')
    		{
    			num *= 10, num += str[i] - '0';
    			flag = true;
    		}
    		else
    		{
    			if (flag)
    			{
    				number.push(num);
    				num = 0, flag = false;
    			}
    
    			if (str[i] == '(')
    				symbol.push(str[i]);
    			else if (str[i] == ')')
    			{
    				while (symbol.top() != '(')
    					calc();
    				symbol.pop(); 
    			}
    			else
    			{
    				while (!symbol.empty() and bank(symbol.top()) >= bank(str[i]))
    					calc();
    				symbol.push(str[i]);
    			}
    		}
    	}
    	if (flag)
    		number.push(num);
    	while (!symbol.empty())
    		calc();
    	cout << number.top();
    
    	return 0;
    }
    
    👎 3
    • 1