描述
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入描述
输入文件为expr.in。 输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“*”,且没有括号,所有参与运算的数字均为 0到 2^31-1 之间的整数。输入数据保证这一行只有0~ 9、+、*这12种字符。
输出描述
输出文件名为expr.out。 输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于 4位时,请只输出最后4位,前导0不输出。
用例输入 1
1+1*3+4
用例输出 1
8
用例输入 2
1+1234567890*1
用例输出 2
7891
用例输入 3
1+1000000003*1
用例输出 3
4
提示
【输入输出样例说明】
样例1计算的结果为8,直接输出8。
样例2计算的结果为 1234567891,输出后4 位,即7891。
样例3计算的结果为 1000000004,输出后4 位,即4。
【数据范围】
对于30%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100;
对于80%的数据,0≤表达式中加法运算符和乘法运算符的总数≤1000;
对于100%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100000。
编者的话:此题并不困难,只要读懂题目即可。(说白了就是考理解)
话不多说,上代码!!!
#include<bits/stdc++.h>
using namespace std;
char c;
long long b,ans=0;
stack<int>st;//用栈会更简单
int main()
{
cin>>b;
st.push(b);
while(cin>>c>>b)//读入
{
if(c=='*'){b=st.top()*b;st.pop();}
st.push(b%10000);//先取一下后四位
}
while(!st.empty())//判断是否为空
{
ans=(ans+st.top())%10000;//加进来
st.pop();
}
cout<<ans;//完美收场
return 0;
}
不对的话,私信我!!!