输入样例 16 9 4 3 +*-@ 输出样例 -47
时间: 2024-04-17 22:25:57 浏览: 102
根据您提供的输入样例和预期输出,我发现您的代码存在一些问题。在处理输入表达式时,您需要根据运算符的优先级正确计算表达式的结果。
以下是修改后的代码,可以正确计算输入表达式的结果:
```cpp
#include <iostream>
#include <stack>
#include <string>
#include <cctype>
#include <sstream>
using namespace std;
stack<long long> sk;
string str;
stringstream tempIO;
long long Calculate(long long a, long long b, char op)
{
switch (op)
{
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
}
return 0;
}
int main()
{
getline(cin, str);
for (int i = 0; str[i] != '@'; i++)
{
if (isdigit(str[i]))
{
tempIO << str[i];
}
else if (str[i] == ' ')
{
long long num = 0;
tempIO >> num;
sk.push(num);
tempIO.clear();
tempIO.str("");
}
else
{
// 获取当前运算符的优先级
int currentPriority = 0;
if (str[i] == '*' || str[i] == '/')
{
currentPriority = 1;
}
// 处理栈中优先级高于或等于当前运算符的操作符
while (!sk.empty() && sk.top() != '(')
{
char op = sk.top();
int stackPriority = 0;
if (op == '*' || op == '/')
{
stackPriority = 1;
}
if (stackPriority >= currentPriority)
{
sk.pop();
long long t1 = sk.top();
sk.pop();
long long t2 = sk.top();
sk.pop();
sk.push(Calculate(t2, t1, op));
}
else
{
break;
}
}
// 将当前运算符入栈
sk.push(str[i]);
}
}
// 处理栈中剩余的运算符
while (!sk.empty() && sk.top() != '(')
{
char op = sk.top();
sk.pop();
long long t1 = sk.top();
sk.pop();
long long t2 = sk.top();
sk.pop();
sk.push(Calculate(t2, t1, op));
}
cout << sk.top() << endl;
return 0;
}
```
使用上述修改后的代码,您应该能够获得预期的输出结果。
阅读全文