码迷,mamicode.com
首页 > 其他好文 > 详细

D 表达式求值 栈的运用

时间:2020-05-08 12:57:25      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:运算符和   32位   scanf   span   color   strlen   code   alt   class   

题意:给出一条字符串数组,只包含数字字符和+ * 这两种运算字符;

   让我们对其进行计算;

   数字不超过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\n",ans);
51     return 0;
52 }
View Code

 

D 表达式求值 栈的运用

标签:运算符和   32位   scanf   span   color   strlen   code   alt   class   

原文地址:https://www.cnblogs.com/pangbi/p/12849528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!