• 【数据结构】P1981 表达式求值


    题目描述

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

    输入格式

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

    输入数据保证这一行只有09、+、×这 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
    ",ans);
    54 }
    55 int main()
    56 {
    57     scanf("%s",s);
    58     //printf("%s
    ",s);
    59     read();
    60     return 0;
    61 }
    View Code
  • 相关阅读:
    JavaScript的数据类型和运算符总结
    html&css精华总结
    lambda表达式&map&filter&yield
    tp5.1 order函数排序无效和orderRaw自定义处理排序
    tp5.1 多对多关联,添加中间表自动时间戳
    mysql索引类型和索引方法
    a标签跨域下载文件,解决download失效问题
    js读取input[type=file]图片,并实时预览
    如何禁止浏览器自动填充
    php 一维数组的合并和去重
  • 原文地址:https://www.cnblogs.com/Osea/p/11410338.html
Copyright © 2020-2023  润新知