题目链接:https://www.luogu.com.cn/problem/P1981
思路:
可以用栈写,然后好像就没啥可说的了。
首先读取表达式第一个数字,压入栈中。
然后开始循环输入,边输入边压栈。
先读取字符作为计算符号,或者结束输入。 再读取整数并最多留下它的四位数。
在一次整个读取计算符号加上计算符号的后面挨着的数值后,再判断读取的计算符号是否为 ‘ X ' 号,若是,则弹出栈顶数值与当前读取的数值进行乘法运算,并将结果压入栈中;若不是,则压栈。
读取结束后,不断弹出栈顶数值进行加法运算,直到栈空。
代码如下:
#include <iostream>
#include <stack>
using namespace std;
stack<long long> st;
int main ( )
{
long long a, c, x = 0;
char b;
scanf ( "%lld", &a );
a %= 10000;
st.push ( a );
while ( scanf ( "%c", &b ), b != '\n' )
{
scanf ( "%lld", &a );
a %= 10000;
if ( b == '*' )
{
c = st.top ( );
st.pop ( );
st.push ( a * c % 10000 );
}
else
{
st.push ( a );
}
}
while ( !st.empty ( ) )
{
x += st.top ( );
st.pop ( );
x %= 10000;
}
printf ( "%lld\n", x );
return 0;
}