D表达式求值 栈的运用
Posted pangbi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D表达式求值 栈的运用相关的知识,希望对你有一定的参考价值。
题意:给出一条字符串数组,只包含数字字符和+ * 这两种运算字符;
让我们对其进行计算;
数字不超过32位,每一位数仅用最后四位来表示(相当于对10000取模)
思路:我们只要将运算符和数字慢慢入栈,对于乘法部分,就率先计算即可
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=6e5+10; 4 char a[maxn]; 5 stack<int>S; 6 int main() 7 { 8 S.push(0); 9 S.push(-1); 10 scanf("%s",a+1); 11 int len=strlen(a+1); 12 int sum=0; 13 for(int i=1;i<=len;i++){ 14 if(a[i]>=‘0‘&&a[i]<=‘9‘){ 15 sum=sum*10+a[i]-‘0‘; 16 } 17 else{ 18 if(S.top()==-2){ 19 S.pop(); 20 int tmp=S.top(); 21 S.pop(); 22 tmp=tmp*sum%10000; 23 S.push(tmp); 24 } 25 else S.push(sum); 26 sum=0; 27 if(a[i]==‘+‘){ 28 S.push(-1); 29 } 30 else{ 31 S.push(-2); 32 } 33 } 34 } 35 if(S.top()==-2){ 36 S.pop(); 37 int tmp=S.top(); 38 S.pop(); 39 tmp=tmp*sum%10000; 40 S.push(tmp); 41 } 42 else S.push(sum); 43 int ans=0; 44 while(S.size()){ 45 int tmp=S.top(); 46 S.pop(); 47 if(S.size()) S.pop(); 48 ans=(tmp+ans)%10000; 49 } 50 printf("%d ",ans); 51 return 0; 52 }
以上是关于D表达式求值 栈的运用的主要内容,如果未能解决你的问题,请参考以下文章