博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
p1150[noip2013普及]表达式求值
阅读量:5050 次
发布时间:2019-06-12

本文共 1720 字,大约阅读时间需要 5 分钟。

描述 Description

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

输入格式 Input Format
输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“*”,且没有括号,所有参与运算的数字均为0到2^31-1之间的整数。输入数据保证这一行只有0~9、+、*这12种字符

输出格式 Output Format
输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于4位时,请只输出最后4位,前导0不输出。

样例输入 Sample Input

1+1*3+4

样例输出 SampleOutput 

8

时间限制 Time Limitation
1s

注释 Hint
【样例输入2】

1+1234567890*1

【样例输出2】

7891

【样例输入3】

1+1000000003*1

【样例输出3】

4

【样例解释】

  样例1计算的结果为8,直接输出8。

  样例2计算的结果为1234567891,输出后4位,即7891。
  样例3计算的结果为1000000004,输出后4位,即4。
【数据规模】

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

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

 

这道题一看数据用普通的模拟肯定会超时,有因为只有+和*这两种操作,所以直接用栈就可以

如果当前符号是+号,那么就把这个数存入栈中,如果当前符号是*号,则将当前的数和栈顶相乘在放入栈中

最后直接扫描一遍让栈中的所有元素相加即可

代码如下:

#include
#include
#include
#include
#include
using namespace std;struct haha//用结构体记录符号和数字的值{ long long v; char z;}a[101000];int num[101000],top=0;inline void push(int a){ num[++top]=a;}inline void pop(){ top--;}inline int Top(){ return num[top];}bool empty(){ return top<1;}int main(){ string s; cin>>s; int len=s.size(); len++; s[len]='A';//因为最后一个数字后面没有符号,所以要随便添加一个字符,不然这样读不进去 int h=0; int l=1; for(int i=0;i
='0'&&s[i]<='9') { h=h*10+s[i]-'0';//计算当前数字的大小 } else { a[l++].v=h; a[l].z=s[i]; h=0; } } for(int i=1;i<=l;i++) { if(a[i].z!='*')//如果符号不是*号,则这个数进队,因为第一个元素前没有符号,所以不能直接写为if(a[i].z=='+')这样会使第一个元素无法进栈 push(a[i].v); else//如果是*号 { int v=Top();//取栈顶的元素 pop(); push((a[i].v*v)%10000);//将乘完的元素在放进去 } } int ans=0; while(!empty()) { ans+=Top(); pop(); } cout<
<
boom(AC代码)

 

转载于:https://www.cnblogs.com/lcyhaha/p/6641379.html

你可能感兴趣的文章
什么是架构设计
查看>>
程序员学习能力提升三要素
查看>>
PHP 微信错误状态返回码说明
查看>>
【4.1】Python中的序列分类
查看>>
ubuntu 移动文件
查看>>
Easy Mock
查看>>
看看 Delphi XE2 为 VCL 提供的 14 种样式
查看>>
Python内置函数(29)——help
查看>>
机器学习系列-tensorflow-01-急切执行API
查看>>
SqlServer 遍历修改字段长度
查看>>
Eclipse快捷键:同时显示两个一模一样的代码窗口
查看>>
《架构之美》阅读笔记05
查看>>
《大道至简》读后感——论沟通的重要性
查看>>
JDBC基础篇(MYSQL)——使用statement执行DQL语句(select)
查看>>
关于React中props与state的一知半解
查看>>
java中Hashtable和HashMap的区别(转)
查看>>
关闭数据库
查看>>
webStrom智能提示忽略首字母大小写问题
查看>>
层叠加的五条叠加法则(一)
查看>>
设计模式六大原则(5):迪米特法则
查看>>