PTA求解简单的四则运算表达式
时间: 2024-01-03 11:04:52 浏览: 258
PTA(Programming Test and Assessment)平台上有很多简单的四则运算表达式题目,可以练习基本的算术运算和表达式求值。下面是一个例子:
题目描述:
给定一个只包含加、减、乘、除四种基本运算的表达式,求表达式的值。
输入格式:
第一行包含一个整数 T,表示共有 T 组测试数据。
每组数据占一行,包含一个长度不超过 50 的只包含数字与加、减、乘、除四种运算符的表达式。
输出格式:
对于每组数据,输出表达式的值,保留两位小数。
样例输入:
2
1+2*3-4/5
3+5*8-6/2
样例输出:
6.20
43.00
代码示例(C++):
```cpp
#include <iostream>
#include <stack>
#include <string>
#include <iomanip>
using namespace std;
int main()
{
int T;
cin >> T;
while (T--)
{
string s;
cin >> s;
stack<double> nums;
stack<char> ops;
for (int i = 0; i < s.size(); i++)
{
if (isdigit(s[i]))
{
double num = s[i] - '0';
while (i + 1 < s.size() && isdigit(s[i + 1]))
{
num = num * 10 + s[i + 1] - '0';
i++;
}
nums.push(num);
}
else if (s[i] == '(')
{
ops.push('(');
}
else if (s[i] == ')')
{
while (ops.top() != '(')
{
double b = nums.top();
nums.pop();
double a = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
if (op == '+')
nums.push(a + b);
else if (op == '-')
nums.push(a - b);
else if (op == '*')
nums.push(a * b);
else if (op == '/')
nums.push(a / b);
}
ops.pop();
}
else if (s[i] == '+' || s[i] == '-')
{
while (!ops.empty() && (ops.top() == '+' || ops.top() == '-' || ops.top() == '*' || ops.top() == '/'))
{
double b = nums.top();
nums.pop();
double a = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
if (op == '+')
nums.push(a + b);
else if (op == '-')
nums.push(a - b);
else if (op == '*')
nums.push(a * b);
else if (op == '/')
nums.push(a / b);
}
ops.push(s[i]);
}
else if (s[i] == '*' || s[i] == '/')
{
while (!ops.empty() && (ops.top() == '*' || ops.top() == '/'))
{
double b = nums.top();
nums.pop();
double a = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
if (op == '+')
nums.push(a + b);
else if (op == '-')
nums.push(a - b);
else if (op == '*')
nums.push(a * b);
else if (op == '/')
nums.push(a / b);
}
ops.push(s[i]);
}
}
while (!ops.empty())
{
double b = nums.top();
nums.pop();
double a = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
if (op == '+')
nums.push(a + b);
else if (op == '-')
nums.push(a - b);
else if (op == '*')
nums.push(a * b);
else if (op == '/')
nums.push(a / b);
}
cout << fixed << setprecision(2) << nums.top() << endl;
}
return 0;
}
```
阅读全文