描述

啦啦啦。作为一个苦逼的程序猿。?。请看下图。。。

现在老总想让你帮他儿子写个简单计算器(他儿子小学3年级,嘘!),写不出来就扣奖金。。快帮他写吧。。。

给一个包含+-*/()的正确的表达式。要你计算它的结果。
除法的规则类似C/C++中取整除法。比如:9/5=1 10/5=2
其他规则参照现实。。。

输入

多组测试样例

一行字符串(长度小于200)

所有参与运算的数字都为小于1000正整数。

表达式中存在空格。

数据保证合法。

输出

一行
表达式的结果

样例输入

1+2
3+(5-6/(1+2)+10)*8

样例输出

3
107

提示

←_←

话说我的样例很良心啊。

思路:很久以前西南民大比赛做过的题,其实就是给你一个表达式让你求值,我们可以先将它变成波兰式,然后波兰式求值就简单多了

 #include <cstdio>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <stack>
#define maxn 100009
using namespace std;
stack<char>q;
stack<long long>p;
long long priorit[],ans[maxn],h;
bool opp[maxn];
char ch[maxn];
int main()
{
priorit[(int)'+']=priorit[(int)'-']=;
priorit[(int)'*']=priorit[(int)'/']=;
priorit[(int)'(']=;
while(gets(ch+)!=NULL)
{
while(!q.empty())q.pop();
while(!p.empty())p.pop();
h=;
memset(ans,,sizeof(ans));
memset(opp,,sizeof(opp));
long long len=strlen(ch+),idx=,j=;
for(int i=;i<=len;i++)
{
if(ch[i]!=' ')ch[j++]=ch[i];
}
len=j-;
while(idx<=len)
{
long long num=,flag=;
while(ch[idx]>=''&&ch[idx]<=''&&idx<=len)
{
num=num*+ch[idx++]-'';
flag=;
}
if(flag==)
{
if(ch[idx]=='(')q.push('(');
else if(ch[idx]==')')
{
while(!q.empty()&&q.top()!='(')
{
ans[++h]=-(long long)q.top();
opp[h]=;
q.pop();
}
q.pop();
}
else
{
while(!q.empty()&&priorit[(long long)q.top()]>=priorit[(int)ch[idx]])
{
ans[++h]=-(int)q.top();
opp[h]=;
q.pop();
}
q.push(ch[idx]);
}
}
else
{
ans[++h]=num;
}
if(flag==)idx++;
}
while(!q.empty())
{
ans[++h]=-(long long)q.top();
opp[h]=;
q.pop();
}
for(int i=;i<=h;i++)
{
// printf("%I64d ",ans[i]);
if(opp[i]==)p.push(ans[i]);
else
{
long long u=p.top();
p.pop();
long long v=p.top();
p.pop();
if(ans[i]==-(int)'-')p.push(v-u);
if(ans[i]==-(int)'+')p.push(u+v);
if(ans[i]==-(int)'*')p.push(u*v);
if(ans[i]==-(int)'/')p.push(v/u);
}
}
if(!p.empty())printf("%I64d\n",p.top());
else printf("0\n");
}
}

西南民大oj 1762 我的式子不可能那么难写 【波兰式】的更多相关文章

  1. 西南民大oj(两园交求面积)

    西南民大oj:http://www.swunacm.com/acmhome/welcome.do?method=index 我的几何不可能那么可爱 时间限制(普通/Java) : 1000 MS/ 3 ...

  2. 西南民大oj(递推)

    我的数学不可能那么难推 时间限制(普通/Java) : 3000 MS/ 9000 MS          运行内存限制 : 65536 KByte总提交 : 49            测试通过 : ...

  3. 西南民大oj(矩阵快速幂)

    我的名字不可能那么难记 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte总提交 : 16            测试通过 : ...

  4. 民大OJ 1668 追杀系列第二发

    追杀系列第二发 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 57            测试通过 : 16 ...

  5. 各大Oj平台介绍 刷题平台

    https://leetcode.com/ http://www.cnblogs.com/lzmfywz/archive/2012/02/07/2342010.html 1.题库与网站资源题库-在线提 ...

  6. 各大Oj平台介绍

    1.题库与网站资源题库-在线提交系统(Online Judge)简介   下面是几个比较大的在线提交系统(OnlineJudge)里面有大量历年的竞赛题目,注册一个ID,然后用自己熟悉的语言(一般有P ...

  7. 蓝桥杯练习-各大OJ平台介绍

    校赛准备的不够充分,简单题失分太遗憾, 有幸参加到省赛,这次先码一下练习平台,等学期结束忙完之后好好练习! 1.题库与网站资源题库-在线提交系统(Online Judge)简介   下面是几个比较大的 ...

  8. 国外、国内各大OJ

    下面是几个比较大的在线提交系统(Online Judge)里面有大量历年的竞赛题目,注册一个ID,然后用自己熟悉的语言(一般有Pascal/C/C++/Java)写好源代码提交即可,会实时返 回信息告 ...

  9. 各大Oj平台介绍[转]

    1.题库与网站资源题库-在线提交系统(Online Judge)简介   下面是几个比较大的在线提交系统(OnlineJudge)里面有大量历年的竞赛题目,注册一个ID,然后用自己熟悉的语言(一般有P ...

随机推荐

  1. 闹心的CSDN

    近来搜索技术文章时,每次来到csdn上时,显示全文就提示登陆. 唉登陆就登陆吧,记不清账号了,就用手机号获取验证码.然后更改密码.我靠,密码居然要8位以上,要有大小写字母.数字和标点符号的组合... ...

  2. winform中显示标题,点击打开链接

    效果:显示的是标题,但是点击打开的是链接 思路:定义一个类,将类实例化,向类中写入数据,再将类放到listbox中,设置listbox的显示分类为文本 前台:放入一个listbox控件 后台: pub ...

  3. python 基础网络编程2

    python 基础网络编程2 前一篇讲了socketserver.py中BaseServer类, 下面介绍下TCPServer和UDPServer class TCPServer(BaseServer ...

  4. python自动化基础问题解析

      (1)自动化代码中用到的设计模式: po模式(page object): 1.PO提供了一种业务流程与页面元素操作分离的模式,这使得测试代码变得更加清晰. 2.页面对象与用例分离,使得我们更好的复 ...

  5. AR报表控件的常见问题汇总

    1)字符串格式不正确 原因是建立报表时未使用分页报表 导致拖动数据为sum()表达式,sum运算字符串当然会出问题 2)超出索引 顾名思义 数据为空或不匹配 3)图片使用远程图片时记得把属性修改为远程 ...

  6. Linux内核漏洞利用-环境配置(转)

    实验环境: Ubuntu-14.04.1 x86 linux-2.6.32.1 busybox-1.27.2 qemu 0x00 安装qemu sudo apt-get install qemu qe ...

  7. numpy中tile函数

    tile函数位于python模块numpy.lib.shape_base中,他的功能是重复某个数组. 函数的形式是tile(A,reps) 函数参数说明中提到A和reps都是array_like的,什 ...

  8. <MySQL>入门一 查询 DQL

    1. 数据库表 1.1 员工表 Create Table CREATE TABLE `employees` ( `employee_id` ) NOT NULL AUTO_INCREMENT, `fi ...

  9. MySQL Group Replication(组复制MGR)

    MGR基本要求: 1.InnoDB存储引擎 2.主键,每个表必须具有已定义的主键或等效的主键,其中等效项是非null唯一键 3.IPv4网络 4.网络性能 5.开启二进制日志并开启GTID模式 6.m ...

  10. django第六天(模板相关,过滤器和标记)

    django第6天 DTL简介 django template language django模板语言 语法: filter{{}} tag{% %} 简单变量的使用 视图函数可以通过两种方式将变量船 ...