终于会了!可喜可贺!可喜可贺!
 

计算(calc.cpp)

【问题描述】
小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)”,“0-9”,“+”,“-”,“*”,“/”,“^”求出的值就是密码。小明数学学得不好,还需你帮他的忙。(“/”用整数除法)
【输入】
输入文件calc.in共1行,为一个算式。
【输出】
输出文件calc.out共1行,就是密码。
【输入样例】calc.in
1+(3+2)*(7^2+6*9)/(2)
【输出样例】calc.out
258
【限制】
100%的数据满足:算式长度<=30 其中所有数据在231-1的范围内。
 #include<iostream>
#include<cmath>
#include<cstdio>
#include<string>
#include<cstring> using namespace std; int number[],i=, p=;
char symbol[],s[],t[]; void push() { //算符入栈运算
symbol[++p]=s[i];
} void pop() { //运算符栈顶元素出栈,并取出操作数栈元素完成相应的运算
switch (symbol[p--]) { //运算完成之后扔掉运算符,也标志着需要运算的数已经运算完成
case '+': {
number[p]+=number[p + ];
break;
}
case '-': {
number[p]-=number[p + ];
break;
}
case '*': {
number[p]*=number[p + ];
break;
}
case '/': {
number[p]/=number[p + ];
break;
}
case '^': {
number[p]=pow(number[p],number[p + ]);
}
}
} bool can() { //判断运算符的优先级别,建立标志函数,能否进行运算
if ((s[i]=='+'||s[i]=='-')&&symbol[p]!='(')//如果不是‘(’,则需要出栈,因为+与-的运算优先级别较低,仅仅比‘(’大
return ;
if ((s[i]=='*'||s[i]=='/')&&(symbol[p]=='*'||symbol[p]=='/'))
//若遇到乘除且运算符数组中对应的恰好是乘除,则需要出栈
return ;
return ;
} bool judge(char s[]) {
int top=,i=;
while (s[i]!='@') {
if (s[i]=='(')top++;
if (s[i]==')') {
if (top>) top--;
else return ;
}
i++;
}
if (top!=) return ; //检测栈是否为空。不空则说明有未匹配的括号
else return ;
} int main() {
gets(s);
if(judge(s)==) {
cout<<"NO";
return ;
} s[strlen(s)]=')';
symbol[p]='(';
while (i<strlen(s)) {
while (s[i]=='(') { //左括号处理,压入左括号,有了左括号才能进行与右括号的匹配 while (symbol[p]!=‘(‘)
push();
i++;
}
int x=;
while (s[i]>=''&&s[i]<='') //取数入操作数栈
x=x*+s[i++]-'';
number[p]=x;
do {
if (s[i]==')') { //当右括号后面还有右括号时处理
while (symbol[p]!=')')
pop();//当括号内还有算式没有算完时进行运算
number[--p]=number[p + ];//当运算完成以后左括号已经没有意义,所以将指针p移向前一个运算符,并复制所得的结果
} else {
//根据标志函数值作运算符入栈或出栈运算处理
while (can())
pop();// 当可以进行运算时运算,然后压入一个运算符
push();
}
i++;
} while (i<strlen(s)&&s[i-]==')');//当检测到右括号时,可以运算括号内的内容
}
printf("Result=%d", number[]);//这个是建立在最后有‘@’的情况下。因为所有的运算全部是建立在括号之内的,所以随着运算符的减少(运算符减少同时标志着需要操作的数减少)和最后的p--,结果一定保存在number[0]内
//printf("Result=%d",number[1]);
//如果需要不输入‘@’的运算式,则只需把从number【0】输出改为number【1】就好啦~
return ;
}

计算(calc.cpp) 这题我搞了2晚上qwq的更多相关文章

  1. 计算(calc.cpp)

    计算(calc.cpp) [问题描述] 小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)”,“0-9”,“+”,“-”,“*” ...

  2. 计算(calc)

    计算(calc) [题目描述] 小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有"(",")",& ...

  3. 原来css也可以计算-calc()使用

    在浏览其他人的源代码时,看到了一个陌生的属性:width:calc(100% - 10px -10px); 出于好奇心,百度了一下,看到了以下这篇文章,http://www.w3cplus.com/c ...

  4. css盒模型宽高混合计算calc

    例如: .element{ width:calc(expression); } 兼容性:在IE9+.FF4.0+.Chrome19+.Safari6+都得到了较好支持,但是在移动端的支持不是很好. 其 ...

  5. 洛谷P1028 数的计算 题解 动态规划入门题

    题目链接:https://www.luogu.com.cn/problem/P1028 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数 \(n\) ): 先输入一个自然数 \(n(n \ ...

  6. calc 多项式计算 (STL版和非STL版) -SilverN

    计算(calc.cpp) [问题描述] 小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)”,“0-9”,“+”,“-”,“*” ...

  7. 解题:HNOI 2008 玩具装箱

    题面 搞了一晚上斜率优化,大概懂了一点,写写 原来常用的优化dp方法:做前缀和,预处理,数据结构维护 现在有转移方程长这样的一类dp:$dp[i]=min(dp[i],k[i]*x[j]+y[j]+c ...

  8. 1010: [HNOI2008]玩具装箱toy [dp][斜率优化]

    Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...

  9. 5-6 学生CPP成绩计算

    给出下面的人员基类框架: class Person { protected: string name; int age; public: Person(); Person (string p_name ...

随机推荐

  1. NIT校赛-- 雷顿女士与平衡树

    题意:https://ac.nowcoder.com/acm/contest/2995/E 给你一棵树,节点有权值,让你求所有路径max-min的和. 思路: 我们计算每个点的贡献,对于一个点,当它为 ...

  2. spark调优篇-oom 优化(汇总)

    spark 之所以需要调优,一是代码执行效率低,二是经常 OOM 内存溢出 内存溢出无非两点: 1. Driver 内存不够 2. Executor 内存不够 Driver 内存不够无非两点: 1. ...

  3. linux tcp listen函数的参数backlog

    1 listen函数(http://man7.org/linux/man-pages/man2/listen.2.html) int listen(int sockfd, int backlog); ...

  4. SpringBoot下实现MongoDB字段类型转换器

    1 目的 MongoDB Java String LocalDateTime 2 实现 先定义实体类 @Data // lombok @Accessors(chain = true) @Documen ...

  5. 动态对象(dynamic)的用法

    说到正确用法,那么首先应该指出一个错误用法: 常有人会拿var这个关键字来和dynamic做比较.实际上,var和dynamic完全是两个概念,根本不应该放在一起做比较.var实际上是编译期抛给我们的 ...

  6. Swagger学习(二、配置swagger)

    基于上一篇 其实只是在SwaggerConfig.class中配置docket,apiInfo @Configuration //变成配置文件 @EnableSwagger2 //开启swagger2 ...

  7. 【QT学习笔记】二、信号槽和自定义信号槽

    1. 信号槽 int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton button("Qui ...

  8. arcgis js之卷帘工具

    arcgis js之卷帘工具 效果图: 代码: var swipe = new Swipe({ view: view, leadingLayers: [layer1, layer2], trailin ...

  9. 如何对Linux内核参数进行优化?

    打开配置文件 vi /etc/sysctl.conf 输入配置,如下是内核优化的参数 # TCP三次握手建立阶段接收SYN请求队列的最大长度,默认为1024(将其设置得大一些可以使出现Nginx繁忙来 ...

  10. spark streaming消费kafka: Java .lang.IllegalStateException: No current assignment for partition

    1 原因是: 多个相同的Spark Streaming同时消费同一个topic,导致的offset问题.关掉多余的任务,就ok了.