【题目描述】

小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)”,“0-9”,“+”,“-”,“*”,“/”,“^”,求出的值就是密码。小明数学学得不好,还需你帮他的忙。(“/”用整数除法)

【输入】

共1行,为一个算式。

【输出】

共1行,就是密码。

【输入样例】

1+(3+2)*(7^2+6*9)/(2)

【输出样例】

258

【源程序】

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define PI acos(-1.0)
#define E 1e-9
#define INF 0x3f3f3f3f
#define LL long long
const int MOD=1000000007;
const int N=10000+5;
const int dx[]= {-1,1,0,0};
const int dy[]= {0,0,-1,1};
using namespace std;int n,m;
stack<int> s1;//操作数栈
stack<char> s2;//运算符栈int lev(char x)//运算符优先级
{if(x=='+'||x=='-')return 1;if(x=='*'||x=='/')return 2;if(x=='^')return 3;return 0;
}void calculate(stack<int> &s1,stack<char> &s2)//弹出栈顶元素并计算
{/*取出后弹出栈*/int y=s1.top();s1.pop();int x=s1.top();s1.pop();char z=s2.top();s2.pop();/*根据运算符计算,并压入栈*/if(z=='+')s1.push(x+y);if(z=='-')s1.push(x-y);if(z=='*')s1.push(x*y);if(z=='/')s1.push(x/y);if(z=='^')s1.push(pow(x,y));
}int c(int x)
{return x!=0;
}
char str[1000000];
int sum[1000000];int main(){scanf("%s",str+1);n=strlen(str+1);for(int i=1;i<=n;i++)//检查匹配{sum[i]+=sum[i-1];if(str[i]=='(')sum[i]++;if(str[i]==')')sum[i]--;}bool out=false;for(int i=2;i<=n;i++)if( c(lev(str[i])) && c(lev(str[i-1])) ){out=1;break;}if( ( n==1 && c(lev(str[1])) )||sum[n]||out )//表达式不合法{cout<<"NO"<<endl;return 0;}stack<int> s1;stack<char> s2;int temp=0;bool flag=false;for(int i=1;i<=n;i++){if('0'<=str[i]&&str[i]<='9')//判断当前字符是否为数字{temp=(temp<<3)+(temp<<1)+str[i]-'0';flag=true;}else{if(flag){s1.push(temp);temp=0;flag=false;}if(str[i]=='('){s2.push(str[i]);continue;}if(str[i]==')'){while(s2.top()!='(')calculate(s1,s2);s2.pop();continue;}while(!s2.empty()&&lev(s2.top())>=lev(str[i]))//优先级判断calculate(s1,s2);s2.push(str[i]);//运算符入栈}}if(flag){s1.push(temp);temp=0;flag=false;}while(!s2.empty())calculate(s1,s2);cout<<s1.top()<<endl;return 0;
}

计算(信息学奥赛一本通-T1356)相关推荐

  1. 信息学奥赛一本通 1356:计算(calc)

    [题目链接] ybt 1356:计算(calc) [题目考点] 1. 表达式求值 中缀表达式求值 2. 表达式树 表达式树:一棵表达式树可以表示一系列的运算. 表达式树中的结点包括运算符与数值 str ...

  2. 信息学奥赛一本通——1012:计算多项式的值

    大家好 今天给大家带来<信息学奥赛一本通--1012:计算多项式的值> 看题目: 1012:计算多项式的值 时间限制: 1000 ms         内存限制: 65536 KB 提交数 ...

  3. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  4. 《信息学奥赛一本通提高篇》第6章 组合数学

    例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...

  5. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  6. 【例8】合唱队形(《信息学奥赛一本通第五版》)

    /* [例8]合唱队形(<信息学奥赛一本通第五版>) http://ybt.ssoier.cn:8088/problem_show.php?pid=1264 [问题描述] N位同学站成一排 ...

  7. 信息学奥赛一本通 1358:中缀表达式值(expr)

    [题目链接] ybt 1358:中缀表达式值(expr) [题目考点] 1. 表达式求值 中缀表达式转后缀表达式 后缀表达式求值 [解题思路] 由于题目要求做中缀表达式转为后缀表达式,而后求值.那么这 ...

  8. Knight Moves(信息学奥赛一本通-T1450)

    [题目描述] 编写一个程序,计算一个骑士从棋盘上的一个格子到另一个格子所需的最小步数.骑士一步可以移动到的位置由下图给出. [输入] 第一行给出骑士的数量 n. 在接下来的 3n 行中,每 3 行描述 ...

  9. 信息学奥赛一本通——2062:【例1.3】电影票

    2062:[例1.3]电影票 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 57341     通过数: 34230 [题目描述] 已知一位小朋友的电影票价是10 ...

最新文章

  1. 发那科机器人控制柜示教器不通电_分享ABB机器人控制柜和本体的接线,给刚入门机器人的新人...
  2. 图灵八月书讯 ——技术图书嘉年华
  3. simple-spring-memcached统一缓存的使用实例4
  4. java微信oppo,OPPO实现全球首次5G微信视频通话,国产手机满分操作
  5. java读取frp_【原创】FRP初探(函数式编程部分)
  6. 机器学习实战教程(四):朴素贝叶斯基础篇之言论过滤器
  7. linux 目录命令_Linux目录命令能力问题和解答
  8. win7系统出现蓝屏0x0000003b怎么解决
  9. linux下使用fdisk命令进行硬盘分区
  10. win8安装wampserver报403错误解决方法
  11. Git 与 GitHub
  12. 【推荐】数据治理资料合集
  13. Unity3D中玻璃、金属材质制作
  14. 鹏鹏:python 机器学习初学者 三剑客介绍。
  15. JavaCore-ClassLoader
  16. Nginx配置虚拟主机三种方式
  17. 华晨宏盛:只需建立正确的理财观,把握科学的理财办法
  18. HTML/CSS布局—Flex布局(弹性布局)
  19. [ 电子]STM32驱动28BYJ-48步进电机实现外网控制
  20. javascript兼容性

热门文章

  1. 推荐一款多功能时间管理神器
  2. 干掉 BeanUtils!试试这款 Bean 自动映射工具,真心强大!
  3. 做到阿里P7和考上985/211哪个更难?
  4. 从戈君离开B站,聊聊技术人如何面对期权不踩坑
  5. FastJson稍微使用不当就会导致StackOverflow
  6. 58到家运维专家杨经营:业务上云后运维平台的演进之路
  7. 浪费超9000亿美金,数字化转型失败罪魁祸首在DevOps?
  8. autopoi升级到4.0版本修改方法
  9. 两台windows服务器----SVN的迁移
  10. springboot oauth 鉴权之——password、authorization_code鉴权