题目描述:
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入:
输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“”,且没有括号,所有参与运算的数字均为 0 到 2^31-1 之间的整数。输入数据保证这一行只有 0~ 9、+、这 12 种字符。
输出:
输出只有一行,包含一个整数, 表示这个表达式的值。 注意: 当答案长度多于 4 位时,请只输出最后 4 位,前导 0 不输出。
样例 input:
1+5*6
样例 output:
31
这是一道很经典的一道 栈 的题。大致思路如下:
当输入是符号 +
时: 将当前数
n
n
n 压入栈中;
当输入是符号 *
时: 取出栈顶元素
v
v
v, 计算
v
v
v 与
n
n
n 之积, 再将结果压入栈中
代码中有使用 stringstream
, 不懂的同学可以自行搜索.
彩蛋: 这题用 python
写的话钛水了.
Python代码:
print(input()%10000)
没错用 python
就是这么简单
C++代码:
#include <iostream>
#include <sstream>
#include <stack>
const int N = 4096;
std::stack <int> stk;
int n, ans;
char oprt, expr[N];
int main()
{
std::cin.getline(expr, N);
std::stringstream e;
e << expr, e >> n;
stk.push(n);
while (e >> oprt >> n)
{
if (oprt == '+')
stk.push(n);
else if (oprt == '*')
{
int v = stk.top();
stk.pop();
stk.push((v * n) % 10000);
}
}
while (!stk.empty())
{
ans += stk.top();
stk.pop();
}
printf("%d", ans % 10000);
return 0;
}