为啥 RE
  • 板块灌水区
  • 楼主qwertfxzcvb
  • 当前回复3
  • 已保存回复4
  • 发布时间2024/6/18 18:04
  • 上次更新2024/6/18 21:34:42
查看原帖
为啥 RE
1346758
qwertfxzcvb楼主2024/6/18 18:04

题目

小明在你的帮助下,破密了 Ferrari 设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有(,),0-9,+,-,*,/,^,求出的值就是密码。小明数学学得不好,还需你帮他的忙。(/用整数除法)

输入样例:

1+(3+2)∗(72+6∗9)/(2)1+(3+2)*(7^2+6*9)/(2)

输出样例:

258258

我的代码

#include<bits/stdc++.h>
using namespace std;

int cal(char op, int a, int b) 
{
    switch(op) 
	{
        case '+': return a + b;
        case '-': return a - b;
        case '*': return a * b;
        case '/': return a / b;
        case '^': return pow(a, b);
        return 0;
    }
}

int yxj(char op) 
{
    if (op == '+' || op == '-') return 1;
    if (op == '*' || op == '/') return 2;
    if (op == '^') return 3;
    return 0;
}

int solve(string s) 
{
    stack<int> val;
    stack<char> ops;
    for (int i = 0; i < s.size(); i++) 
	{
        if (s[i] == ' ') continue;
        if (isdigit(s[i])) 
		{
            int v = 0;
            while (i < s.size() && isdigit(s[i])) 
			{
                v = (v * 10) + (s[i] - '0');
                i++;
            }
            val.push(v);
            i--;
        }
        else if (s[i] == '(') ops.push(s[i]);
        else if (s[i] == ')') 
		{
            while (!ops.empty() && ops.top() != '(') 
			{
                int v2 = val.top();
				 val.pop();
                int v1 = val.top(); 
				val.pop();
                char op = ops.top(); 
				ops.pop();
                val.push(cal(op, v1, v2));
            }
            if (!ops.empty()) ops.pop(); 
        }
        else 
		{
            while (!ops.empty() && yxj(ops.top()) >= yxj(s[i])) 
			{
                int v2 = val.top(); 
				val.pop();
                int v1 = val.top(); 
				val.pop();
                char op = ops.top(); 
				ops.pop();
                val.push(cal(op, v1, v2));
            }
            ops.push(s[i]);
        }
    }
    while (!ops.empty()) 
	{
        int v2 = val.top(); 
		val.pop();
        int v1 = val.top(); 
		val.pop();
        char op = ops.top(); 
		ops.pop();
        val.push(cal(op, v1, v2));
    }
    return val.top();
}

int main() 
{
    string s;
    getline(cin, s);
    cout << solve(s);
    return 0;
}
2024/6/18 18:04
加载中...