数据结构P1981 表达式求值
Posted osea
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构P1981 表达式求值相关的知识,希望对你有一定的参考价值。
题目描述
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入格式
一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“++”和乘法运算符“×”,且没有括号,所有参与运算的数字均为 0 到 2^31之间的整数。
输入数据保证这一行只有0−9、+、×这 1212种字符。
输出格式
一个整数,表示这个表达式的值。
注意:当答案长度多于 4 位时,请只输出最后4 位,前导0不输出。
输入输出样例
输入 #1
1+1*3+4
输出 #1
8
输入 #2
1+1234567890*1
输出 #2
7891
输入 #3
1+1000000003*1
输出 #3
4
【题解】
经典问题,利用栈直接模拟即可,过程中需要取模运算即可。
1 #include<algorithm> 2 #include<iostream> 3 #include<cstring> 4 #include<cstdio> 5 #include<stack> 6 using namespace std; 7 const int N = 2e6+10; 8 const int mod = 10000; 9 char s[N]; 10 stack <int> num ; 11 12 int Mul(int u ,int v ) 13 return u * v % mod ; 14 15 int Add(int u ,int v ) 16 int res = u+v ; 17 if( res >= mod ) res -= mod ; 18 return res ; 19 20 void read() 21 int len = strlen(s) , i=1 ; 22 int x = s[0] - ‘0‘ ; 23 bool mul = false ; 24 while( i < len ) 25 while( ‘0‘ <= s[i] && s[i] <= ‘9‘ ) 26 x = x * 10 + s[i] - ‘0‘ ; 27 i ++ ; 28 29 if( x >= 10000 ) x%=10000; 30 num.push(x); 31 32 if( mul ) 33 int t1 = num.top() ; 34 num.pop(); 35 int t2 = num.top() ; 36 num.pop(); 37 x = Mul(t1,t2); 38 num.push(x); 39 mul = false; 40 41 42 if( s[i] == ‘+‘ || s[i] ==‘*‘ ) 43 mul = (s[i] ==‘*‘) ; 44 45 x = 0 ; 46 i++; 47 48 int ans = 0 ; 49 while( !num.empty() ) 50 ans = Add( (int)num.top() , ans ); 51 num.pop() ; 52 53 printf("%d\n",ans); 54 55 int main() 56 57 scanf("%s",s); 58 //printf("%s\n",s); 59 read(); 60 return 0; 61
以上是关于数据结构P1981 表达式求值的主要内容,如果未能解决你的问题,请参考以下文章