题目描述

给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。

输入格式

一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“++”和乘法运算符“×”,且没有括号,所有参与运算的数字均为 0 到 2^{31}之间的整数。

输入数据保证这一行只有0−9、+、×这 1212种字符。

输出格式

一个整数,表示这个表达式的值。

注意:当答案长度多于 4 位时,请只输出最后4 位,前导0不输出。

输入输出样例

输入 #1

  1. 1+1*3+4
输出 #1

  1. 8
输入 #2

  1. 1+1234567890*1
输出 #2

  1. 7891
输入 #3

  1. 1+1000000003*1
输出 #3

  1. 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+;
  8. const int mod = ;
  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= ;
  22. int x = s[] - '' ;
  23. bool mul = false ;
  24. while( i < len ){
  25. while( '' <= s[i] && s[i] <= '' ){
  26. x = x * + s[i] - '' ;
  27. i ++ ;
  28. }
  29. if( x >= ) x%=;
  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 = ;
  46. i++;
  47. }
  48. int ans = ;
  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 ;
  61. }

【数据结构】P1981 表达式求值的更多相关文章

  1. 洛谷 P1981 表达式求值

    P1981 表达式求值 题目描述 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值. 输入输出格式 输入格式: 输入文件为 expr.in. 输入仅有一行,为需要你计算的表达式,表达式中只 ...

  2. P1981 表达式求值

    P1981 表达式求值 题解 这个题联想一下  P1310 表达式的值  思路就是输入中缀式,转成后缀式,然后按后缀式计算,完美!!       but!! 会严重RE,因为你可能会输入中缀式的时候输 ...

  3. 题解-洛谷P1981 表达式求值(模拟+处理优先级的递归)

    https://www.luogu.org/problemnew/show/P1981 (原题链接) 显然乘法的优先级高与加法,因此碰到乘号就要优先把一连串与乘号相连的数算出,很容易想到递归.可用普通 ...

  4. 洛谷P1981 表达式求值 题解 栈/中缀转后缀

    题目链接:https://www.luogu.org/problem/P1981 这道题目就是一道简化的中缀转后缀,因为这里比较简单,只有加号(+)和乘号(*),所以我们只需要开一个存放数值的栈就可以 ...

  5. 洛谷 P1981 表达式求值(模拟)

    嗯... 题目链接:https://www.luogu.org/problem/P1981 这道题其实是数组模拟栈.首先处理乘法:注意从后往前处理,处理后归零.然后把数都加起来即可. AC代码: #i ...

  6. 洛谷p1981 表达式求值

    #include <iostream> #include <cstdio> #include <cstring> using namespace std; char ...

  7. NOIP2013普及组 T2 表达式求值

    OJ地址:洛谷P1981 CODEVS 3292 正常写法是用栈 #include<iostream> #include<algorithm> #include<cmat ...

  8. 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值

    一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚, ...

  9. C++表达式求值(利用数据结构栈)

    唉,刚刚用C++又又一次写了一个较完好的表达式求值程序,最后精简后程序还不到100行.这不经让我 想到了大一上学期刚学c语言时自己费了好大的劲,写了几百行并且功能还不是非常齐全(当时还不能计算有括号的 ...

随机推荐

  1. c标签页面进行解析json

    JAVA代码中的后台 List<Map<String,String>> rs = new ArrayList<Map<String,String>>() ...

  2. jquery 性能优化高级技巧

    有时为了书写方便,忽视了程序执行中给客户端带来的压力.导致在低端浏览器的运行缓慢. 1>通过CDN引用jquery,能减少网站加载时间.http://apps.bdimg.com/libs/jq ...

  3. jquery报变量没定义错误的原因

    该变量定义的范围:不在使用的方法中:

  4. https://en.wikipedia.org/wiki/Green_threads

    https://en.wikipedia.org/wiki/Green_threads

  5. utf-8的中文是一个字符占几个字节

    utf-8的中文是一个字符占几个字节 英文字母和中文汉字在不同字符集编码下的字节数英文字母:·字节数 : 1;编码:GB2312 字节数 : 1;编码:GBK 字节数 : 1;编码:GB18030 字 ...

  6. struct2json -- C结构体与 JSON 快速互转库V1.0发布

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/zhutianlong/article/d ...

  7. IfcRelDefinesByProperties IfcPropertySetDefinitionSelect IfcPropertySetDefinition IfcPropertySetDefinitionSet

    private void updateObject(IfcObject ifcObject, PropertyNode root) { /* if(ifcObject.getClassName().t ...

  8. SortedMap和TreeMap有什么区别?

    SortedMap和TreeMap有什么区别   答: TreeMap的类的源码: public class TreeMap<K,V> extends AbstractMap<K,V ...

  9. 性能测试-Linux资源监控⽅式

    Linux资源监控⽅式 1. 命令 2. 第三⽅⼯具(nmon) 3. LR(需要安装RPC相应服务包和开启服务)(略)   ⼀.命令 ⽅式 1. top (系统资源管理器) 2. vmstat (查 ...

  10. (十五)Centos之安装jdk

    一.手动解压JDK的压缩包,然后设置环境变量 1 下载linux版的jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk8-d ...