大晚上的写一份题解。。。
问题 F: 表达式求值
时间限制: 1 Sec 内存限制: 128 MB
提交: 50 解决: 11
提交 状态 讨论版
命题人:admin
题目描述
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入
输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘 法运算符“*”,且没有括号,所有参与运算的数字均为 0 到 2^31 -1 之间的整数。
输入数据保 证这一行只有 0~ 9、+、*这 12 种字符。
输出
输出只有一行,包含一个整数,表示这个表达式的值。
注意:当答案长度多于 4 位时, 请只输出最后 4 位,前导 0 不输出。
样例输入
1+1*3+4
样例输出
8
提示
样例 计算的结果为 8,直接输出 8。
【数据范围】
对于 30%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100;
对于 80%的数据,0≤表达式中加法运算符和乘法运算符的总数≤1000;
对于 100%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100000。
思路
这个很简单,学过数据结构的都知道用栈,因为这个运算符只有‘*’和‘+’所以很简单,,上代码
#include<bits/stdc++.h>
using namespace std;
int main(){
stack<long long int>st;
string str;
cin>>str;
for(int i=0;i<str.length();i++){
if(str[i]<='9'&&str[i]>='0'){
long long int c=0;
while(str[i]<='9'&&str[i]>='0'){
long long int k=str[i]-48;
c=(c*10+k)%10000;
i++;
}
st.push(c);
i--;
}
else if(str[i]=='*'){
long long int c=0;
++i;
while(str[i]<='9'&&str[i]>='0'){
long long int k=str[i]-48;
c=(c*10+k)%10000;
i++;
}
i--;
int b=st.top();
st.pop();
st.push(c*b%10000);
}
else
continue;
}
long long int sum=0;
while(!st.empty()){
int a=st.top();
st.pop();
sum+=a;
sum=sum%10000;
}
cout<<sum<<endl;
return 0;
}
比赛的时候,,,忘了后四位数,,,结果 过了好几遍,还有就是它的 范围是2^31要进行取模运算