西南民大oj 1762 我的式子不可能那么难写 【波兰式】
描述
现在老总想让你帮他儿子写个简单计算器(他儿子小学3年级,嘘!),写不出来就扣奖金。。快帮他写吧。。。
输入
一行字符串(长度小于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 我的式子不可能那么难写 【波兰式】的更多相关文章
- 西南民大oj(两园交求面积)
西南民大oj:http://www.swunacm.com/acmhome/welcome.do?method=index 我的几何不可能那么可爱 时间限制(普通/Java) : 1000 MS/ 3 ...
- 西南民大oj(递推)
我的数学不可能那么难推 时间限制(普通/Java) : 3000 MS/ 9000 MS 运行内存限制 : 65536 KByte总提交 : 49 测试通过 : ...
- 西南民大oj(矩阵快速幂)
我的名字不可能那么难记 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 16 测试通过 : ...
- 民大OJ 1668 追杀系列第二发
追杀系列第二发 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte 总提交 : 57 测试通过 : 16 ...
- 各大Oj平台介绍 刷题平台
https://leetcode.com/ http://www.cnblogs.com/lzmfywz/archive/2012/02/07/2342010.html 1.题库与网站资源题库-在线提 ...
- 各大Oj平台介绍
1.题库与网站资源题库-在线提交系统(Online Judge)简介 下面是几个比较大的在线提交系统(OnlineJudge)里面有大量历年的竞赛题目,注册一个ID,然后用自己熟悉的语言(一般有P ...
- 蓝桥杯练习-各大OJ平台介绍
校赛准备的不够充分,简单题失分太遗憾, 有幸参加到省赛,这次先码一下练习平台,等学期结束忙完之后好好练习! 1.题库与网站资源题库-在线提交系统(Online Judge)简介 下面是几个比较大的 ...
- 国外、国内各大OJ
下面是几个比较大的在线提交系统(Online Judge)里面有大量历年的竞赛题目,注册一个ID,然后用自己熟悉的语言(一般有Pascal/C/C++/Java)写好源代码提交即可,会实时返 回信息告 ...
- 各大Oj平台介绍[转]
1.题库与网站资源题库-在线提交系统(Online Judge)简介 下面是几个比较大的在线提交系统(OnlineJudge)里面有大量历年的竞赛题目,注册一个ID,然后用自己熟悉的语言(一般有P ...
随机推荐
- LR中常见请求的使用示例
Action(){ //application/x-www-form-urlencoded //application/json //web_add_auto_header("Content ...
- get和post请求及进程和线程及cookie和session的区别
get和post请求及进程和线程及cookie和session的区别 1.get和post请求的区别 get请求是指向服务器进行获取查询数据的请求,post请求指向服务器提交数据的请求. get请求如 ...
- SQL增删查改语句
一.增:有4种方法 1.使用insert插入单行数据: 语法:insert [into] <表名> [列名] values <列值> insert into sheet1 va ...
- 用cssText批量修改样式
一般情况下我们用js设置元素对象的样式会使用这样的形式: var element= document.getElementById(“id”);element.style.width=”20px”;e ...
- Vue的安装并在WebStorm中运行
一.Vue的安装需要两个支持分别为:nodejs.npm Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O ...
- common-fileupload上传文件
文件上传在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件上传功 ...
- HTML5开发手机应用--viewport的作用--20150216
在用HTML5开发手机应用或手机网页时,<head>部分总会有如下一段代码,这段代码到底什么意思呢.在网上,大家会得到很多答案.我从网上搜集了部分介绍,整理一下,以留备用. <met ...
- Re:从零开始的Linux之路(基础篇)
基于 Red Hat Enterprise Linux 7.5 或者 CentOS 7.4 Linux的命令一定遵循以下格式:command指令 [-options]选项 parameter1参数 ...
- 详解css媒体查询
简介 媒体查询(Media Queries)早在在css2时代就存在,经过css3的洗礼后变得更加强大bootstrap的响应式特性就是从此而来的. 简单的来讲媒体查询是一种用于修饰css何时起作用的 ...
- pymongo的简单使用
pymongo的使用 首先安装: pip install pymongo 安装好了使用 import pymongo # 链接mongodb,得到一个mongoclient的客户端对象 client ...