题目描述

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

输入输出格式

输入格式:

输入文件为 expr.in。

输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘

法运算符“*”,且没有括号,所有参与运算的数字均为 0 到 2^31-1 之间的整数。输入数据保

证这一行只有 0~ 9、+、*这 12 种字符。

输出格式:

输出文件名为 expr.out。

输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于 4 位时,

请只输出最后 4 位,前导 0 不输出。

输入输出样例

输入样例#1: 复制

1+1*3+4
输出样例#1: 复制

8
输入样例#2: 复制

1+1234567890*1
输出样例#2: 复制

7891
输入样例#3: 复制

1+1000000003*1
输出样例#3: 复制

4

说明

对于 30%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100;

对于 80%的数据,0≤表达式中加法运算符和乘法运算符的总数≤1000;

对于 100%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100000。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define mod 10000
#define MAXN 1000010
using namespace std;
int tmp[MAXN];
int top1,top2,len;
char s[MAXN],bns[MAXN];
long long stack1[MAXN];
void work(){
int m1=stack1[top1],n1=stack1[top1-];
top1--;
if(bns[top2]=='+')
stack1[top1]=(n1%mod+m1%mod)%mod;
else if(bns[top2]=='*')
stack1[top1]=(n1%mod*m1%mod)%mod;
top2--;
}
int main(){
tmp[]=;tmp[]=;
scanf("%s",s);
len=strlen(s);
long long num=;
for(int i=;i<len;i++){
if(s[i]>=''&&s[i]<='') num=num*+s[i]-'';
else{
if(num!=){
stack1[++top1]=num;
num=;
}
if(tmp[s[i]]<tmp[bns[top2]]) bns[++top2]=s[i];
else{
while(tmp[s[i]]>=tmp[bns[top2]]&&top2>) work();
bns[++top2]=s[i];
}
}
}
if(num!=){ stack1[++top1]=num;num=; }
while(top2>) work();
cout<<stack1[]%mod;
}

80gg

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
int main()
{
long long shu,sum=,cj,sg;//记得sum初始值赋为0;cj为其中一段运算(即一段连续的乘积)的值
char ch=,xg;//ch存储上一个运算符,xg为新读入的运算符
bool tf=true;
while(tf)
{
scanf("%lld",&shu);
tf=scanf("%c",&xg)==?true:false;//如果下一个没有运算符了,则tf=false,既保证了此次循环的正常运行,又能在下一遍循环跳出
if(ch==)cj=shu;//如果是刚开始读入,则直接赋值
if(ch=='+')sum=(sum+cj)%,cj=shu;//如果上一个操作是加法,则将前一段的值加入到sum中,然后再更新此新段的值
if(ch=='*')cj=(cj*shu)%;//如果上一个运算仍是乘法,则将此数乘入本段的值中
if(!tf)sum=(sum+cj)%;//如果是最后一个元素,则进行最后的更新
ch=xg;//将下一个读入的运算符作为新的一个循环的上一个运算符,并继续循环
}
printf("%lld",sum);//输出
return ;
}

std

洛谷 P1981 表达式求值的更多相关文章

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

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

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

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

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

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

  4. 洛谷p1981 表达式求值

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

  5. P1981 表达式求值

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

  6. 2019.06.17课件:[洛谷P1310]表达式的值 题解

    P1310 表达式的值 题目描述 给你一个带括号的布尔表达式,其中+表示或操作|,*表示与操作&,先算*再算+.但是待操作的数字(布尔值)不输入. 求能使最终整个式子的值为0的方案数. 题外话 ...

  7. 洛谷P1310 表达式的值 题解 栈/后缀表达式的应用

    题目链接:https://www.luogu.org/problem/P1310 本题涉及算法:栈.前缀表达式转后缀表达式,动态规划思想. 这道题目我思考了好长时间,第一时间让我做的话我也做不出来. ...

  8. 洛谷 P1310 表达式的值 解题报告

    P1310 表达式的值 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. "× "运算优先于"⊕"运算,即计算表 ...

  9. 洛谷P1310 表达式的值

    P1310 表达式的值 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算.例 ...

随机推荐

  1. 紫书 例题 10-29 UVa 1642(最优连续子序列)

    这类求最优连续子序列的题一般是枚举右端点,然后根据题目要求更新左端点, 一般是nlogn,右端点枚举是n,左端点是logn 难点在于如何更新左端点 用一些例子试一下可以发现 每次加进一个新元素的时候 ...

  2. 【BZOJ 1047】[HAOI2007]理想的正方形

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 二维的ST表. 每个大的正方形可以由4个小的正方形组成. 然后区域内的最大值最小值.也可以由4个小的张方形部分全部覆盖到. [代码] ...

  3. linux命令su与su-的差别

    su命令和su -命令最大的本质差别就是: su仅仅是切换了root身份.但Shell环境仍然是普通用户的Shell. 而su -连用户和Shell环境一起切换成root身份了. 仅仅有切换了Shel ...

  4. cocos2d-x 2.2.0 怎样在lua中注冊回调函数给C++

    cocos2d-x内部使用tolua进行lua绑定.可是引擎并没有提供一个通用的接口让我们能够把一个lua函数注冊给C++层面的回调事件. 翻看引擎的lua绑定代码,我们能够仿照引擎中的方法来做. 值 ...

  5. 基于matlab的音频波形实时採集显示 v0.1

    robj = audiorecorder(44100,16,1); %设置採样频率.採样位数.通道数 recordblocking(robj,1); %採集初步数据(1s长度) rdata = get ...

  6. spring-cloud导入eclipse时,@slf4j注解为什么找不到log变量

    原因是缺少插件Lomboz. Lomboz是一个基于LGPL的开源J2EE综合开发环境的Eclipse插件,对编码,发布,测试,以及debug等各个软件开发的生命周期提供支持,支持JSP,EJB等.L ...

  7. 分享一个js对象开发组件写法

    var TextCount = (function(){ //私有方法,外面将访问不到 var _bind = function(that){ that.input.on('keyup',functi ...

  8. JavaScript进阶之执行上下文和执行栈

    js引擎的执行过程 执行上下文和执行栈属于js引擎的执行过程的预编译阶段. 执行上下文(Execution Context) 执行上下文是当前 JavaScript 代码被解析和执行时所在环境的抽象概 ...

  9. window.location.href和window.top.location.href的区别

    if (window.location.href == window.top.location.href) {     window.top.location.href = "/index. ...

  10. JS的解析与执行过程—全局预处理阶段之命名冲突的处理策略

    有如下代码: <body> <script> alert(f); function f() { console.log("fff"); } var f = ...