题目描述

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

输入格式

一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“++”和乘法运算符“×”,且没有括号,所有参与运算的数字均为 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

【题解】

  经典问题,利用栈直接模拟即可,过程中需要取模运算即可。

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<stack>
using namespace std;
const int N = 2e6+;
const int mod = ;
char s[N];
stack <int> num ; int Mul(int u ,int v ){
return u * v % mod ;
}
int Add(int u ,int v ){
int res = u+v ;
if( res >= mod ) res -= mod ;
return res ;
}
void read(){
int len = strlen(s) , i= ;
int x = s[] - '' ;
bool mul = false ;
while( i < len ){
while( '' <= s[i] && s[i] <= '' ){
x = x * + s[i] - '' ;
i ++ ;
}
if( x >= ) x%=;
num.push(x); if( mul ){
int t1 = num.top() ;
num.pop();
int t2 = num.top() ;
num.pop();
x = Mul(t1,t2);
num.push(x);
mul = false;
} if( s[i] == '+' || s[i] =='*' ) {
mul = (s[i] =='*') ;
}
x = ;
i++;
}
int ans = ;
while( !num.empty() ){
ans = Add( (int)num.top() , ans );
num.pop() ;
}
printf("%d\n",ans);
}
int main()
{
scanf("%s",s);
//printf("%s\n",s);
read();
return ;
}

【数据结构】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. try 和 catch 的用法

    try块是什么? 一个try块就是程序尝试去执行一段代码,try块后面会有几个异常处理块,如果try块中发生了异常,程序执行流就会进入相应的异常处理块中. 以下程序会帮助理解这个概念 #include ...

  2. Go 语言入门(三)并发

    写在前面 在学习 Go 语言之前,我自己是有一定的 Java 和 C++ 基础的,这篇文章主要是基于A tour of Go编写的,主要是希望记录一下自己的学习历程,加深自己的理解 Go 语言入门(三 ...

  3. 咏南中间件D7客户端演示

    咏南中间件D7客户端演示 咏南中间件MORMOT(http.sys)支持D6.D7等老版本开发客户端.客户端使用TClientDataSet内存表控件,数据序列使用TynSerial类.

  4. php过滤表情符号

    <?php $clean_text = ""; // Match Emoticons $regexEmoticons = '/[\x{1F600}-\x{1F64F}]/u' ...

  5. 微信小程序填坑之路(三):布局适配方案(rpx、px、vw、vh)

    因为小程序是以微信为平台运行的,可以同时运行在android与ios的设备上,所以不可避免的会遇到布局适配问题,特别是在iphone5上,因为屏幕尺寸小的缘故,也是适配问题最多的机型,下面就简单介绍几 ...

  6. 二维背包---P1509 找啊找啊找GF

    P1509 找啊找啊找GF 题解 很明显这是一道二维背包题目 如果一个dp数组做不了,那么我们就再来一个dp数组 题目要求,花费不超过 m ,消耗人品不超过  r  ,泡到尽量多的妹子,时间尽量少 f ...

  7. React 高阶组件浅析

    高阶组件的这种写法的诞生来自于社区的实践,目的是解决一些交叉问题(Cross-Cutting Concerns).而最早时候 React 官方给出的解决方案是使用 mixin .而 React 也在官 ...

  8. 用户登录之asp.net cookie的写入、读取与操作

    页面前面: <div id="login" runat="server"> <span class="log_title" ...

  9. LC 918. Maximum Sum Circular Subarray

    Given a circular array C of integers represented by A, find the maximum possible sum of a non-empty ...

  10. Django开发简单采集用户浏览器信息的小功能

    Django开发简单采集用户浏览器信息的小功能 Centos环境准备 yum install –y python-pip export http_proxy=http://10.11.0.148:80 ...