[NOIP2013 普及组] 表达式求值
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。

Input

一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“*”,且没有括号,所有参与运算的数字均为 int 范围内的正整数。

输入数据保证这一行只有0~9、+、*这12种字符。

Output

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

直接上代码

 1 #include<iostream>
2 long long a[1000001],ha=1,sum=0;
3 char s[1000001];
4 using namespace std;
5 int main()
6 {
7 cin>>a[ha];
8 a[ha]%=10000;
9 while(cin>>s[ha]>>a[++ha])
10 {
11 a[ha]%=10000;
12 }
13 for(int i=ha;i>=1;i--)
14 {
15 if(s[i]=='*')
16 {
17 a[i]*=a[i+1];
18 a[i]%=10000;
19 a[i+1]=0;
20 }
21 }
22 for(int i=1;i<=ha;i++)
23 {
24 sum+=a[i];
25 sum%=10000;
26 }
27 cout<<sum;
28 return 0;
29 }

啥意思呢,就是说他肯定是一个数接着一个字符再接着一个数,所以我们可以用:

cin>>a[ha]; while(cin>>s[ha]>>a[++ha]

那我们就不必把连续的几个数字字符组成一个数字这个恶心的东西了,之后我们把所有是乘数的压入栈中,两个两个的乘起来再相加,但是有一点需要注意一下就是其实并不是两两相乘,而是把我们得到的乘数两两分组,所以如果是两两相乘的话就会有很多值被新加了起来,所以对于两个数a[i]和a[i+1],相乘以后要让a[i+1]=0,这样下一次a[i+2]与a[i+1]如果相乘的话结果就是0,把它加进来也没啥影响。

2022/3/17

最新文章

  1. JavaScript数据属性与访问器属性
  2. 牛客网程序员面试金典:1.2——原串翻转(java实现)
  3. [New Portal]Windows Azure Virtual Machine (15) 在本地制作数据文件VHD并上传至Azure(2)
  4. 利用PBFunc在Powerbuilder中支付宝当面付功能
  5. Linux vmstat命令实战详解
  6. 【摘要】多线程 - BeginInvoke异步调用
  7. JsonModelStrategy策略添加
  8. Python快速教程
  9. Oracle corrupt block(坏块) 详解
  10. shell date
  11. Web自动化框架搭建之二基于数据驱动应用简单实例~~
  12. ASSERT报错:error C2664: “AfxAssertFailedLine”: 不能将参数 1 从“TCHAR []”转换为“LPCSTR”
  13. Android开发必知--使用View.setId的正确姿势
  14. php mysql 实现消息队列
  15. 制作Visual Studio 2017 (VS 2017) 离线安装包
  16. GetFontResourceInfo 函数: 获取字体文件对应的字体名
  17. 从.Net到Java学习第十一篇——SpringBoot登录实现
  18. 如何更新clob类型的内容
  19. url写法细节
  20. 网页中Span和Div的区别

热门文章

  1. 安装Varnish 及遇到的坑
  2. Java线程--Phaser使用
  3. @Resource注解和@Autowired注解
  4. 数组中包含多个对象 按照对象中的时间进行排序 适用与Angular.js、Jquery、微信小程序等
  5. Spark入门案例 - 统计单词个数 / wordcount
  6. iOS数据持久化方式及class_copyIvarList与class_copyPropertyList的区别
  7. VMware15.5虚拟机安装及LInux系统安装前 准备工作
  8. v78.01 鸿蒙内核源码分析(消息映射篇) | 剖析LiteIpc(下)进程通讯机制 | 百篇博客分析OpenHarmony源码
  9. 微信小程序wifi控制开发
  10. 获明略科技B+轮战略投资,思迈特软件Smartbi用强产品思维推动BI生态完善