P1981 表达式求值
题目描述
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入输出格式
输入格式:
输入文件为 expr.in。
输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘
法运算符“*”,且没有括号,所有参与运算的数字均为 0 到 2^31-1 之间的整数。输入数据保
证这一行只有 0~ 9、+、*这 12 种字符。
输出格式:
输出文件名为 expr.out。
输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于 4 位时,
请只输出最后 4 位,前导 0 不输出。
输入输出样例
说明
对于 30%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100;
对于 80%的数据,0≤表达式中加法运算符和乘法运算符的总数≤1000;
对于 100%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100000。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<stack> #include<string> using namespace std; const int N=1e6+5; char s[N]; int num,ans; stack<int> A; stack<char> B; int main() { // freopen("testdata.in","r",stdin); int a,b; char c; scanf("%s",s); int len=strlen(s); for(int i=0;i<len;++i) { if(isdigit(s[i])) { num=0; while(isdigit(s[i])) { num=num*10+s[i]-'0'; ++i; } num%=10000; A.push(num); --i; } else if(s[i]=='*') { ++i; num=0; while(isdigit(s[i])) { num=num*10+s[i]-'0'; ++i; } num%=10000; a=A.top(),A.pop(); num*=a; num%=10000; A.push(num); --i; } } while(!A.empty()) { ans+=A.top(); A.pop(); } printf("%d",ans%10000); return 0; }