计算(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<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
int number[],i=, p=;
char symbol[],s[],t[];
//p:指向当前的运算符,同时指向当前运算符所对应的操作数
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]=='/'))
//若遇到乘除且p对应的恰好是乘除
return ;
return ;
}
main()
{
printf("String :");gets(s);
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]内
return ;
}

计算(calc.cpp)的更多相关文章

  1. 计算(calc.cpp) 这题我搞了2晚上qwq

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

  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. calc 多项式计算 (STL版和非STL版) -SilverN

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

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

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

  7. 5-7 学生cpp成绩统计

    完成“学生cpp成绩计算”之后,修改Person和Student类,各自增加两个无参构造函数. 仍以Person类为基础,建立一个派生类Teacher,增加以下成员数据: int ID;//教师工号 ...

  8. BZOJ4817 SDOI2017 相关分析

    4821: [Sdoi2017]相关分析 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special Judge Description Frank对天文 ...

  9. googletest进行单元测试(使用cmake编译)

    一.前提: 1.假定你的系统为centos6系列 2.假定你已经安装了基本的编译环境,gcc,g++4.4.7 3.假定你已经设置了环境变量:KDS_MOBILE_STOCK_HOME 4.假定你已经 ...

随机推荐

  1. php 返回数组中指定多列的方法

    php array_column 方法可以返回数组中指定的一列,但不能返回多列,本文将介绍array_column方法的使用,并用代码演示返回数组中指定多列的方法. 1.array_column说明 ...

  2. scrapyd 参考(https://www.jianshu.com/p/2a189127901a)

    一    Scrapyd简介 Scrapyd 是一个用来部署和运行 Scrapy 项目的应用,由 Scrapy 的开发者开发.其可以通过一个简单的 Json API 来部署(上传)或者控制你的项目. ...

  3. Bi-shoe and Phi-shoe(欧拉筛)

    Bamboo Pole-vault is a massively popular sport in Xzhiland. And Master Phi-shoe is a very popular co ...

  4. linux普通用户免秘钥登录(xshell工具环境)

    一.xshell生成密钥 1)工具->新建用户密钥生成向导 2)选择密钥类型.密钥长度(默认即可) 3)生成密钥(生成公钥和私钥) 4)为密钥加密,增加密码(可选),建议加上 5)将公钥保存为文 ...

  5. 在Vue项目中使用html2canvas生成页面截图并上传

    使用方法 项目中引入 npm install html2canvas html代码 //html代码 <!-- 把需要生成截图的元素放在一个元素容器里,设置一个ref --> <di ...

  6. iview modal对话框的一个小知识点

    我在做一个项目的一个页面的时候有两个弹窗,发现点击一个弹窗的右上角关闭按钮后,打开另一个弹窗的时候,另一个弹窗里面带有上一个弹窗里的样式内容,说明上一个弹窗并没有被销毁. 后来发现modal源码里的c ...

  7. ActivityManagerService数据结构Activity栈管理(二)

    ActivityManagerService要管理四大组件,那四大组件就必须在AMS中有存在的形式,这里先从AMS 如何管理Activity 谈起: Activity在AMS 中存在的形式为Activ ...

  8. 2019.04.18 读书笔记 深入string

    整个.net中,最特殊的就是string类型了,它有着引用类型的特性,又有着值类型的操作方式,最特殊的是,它还有字符串池,一个字符串只会有一个实例(等下就推翻!). 鉴于之前的<==与Equal ...

  9. mysql忘记root密码处理

    由于测试环境root账户不经常使用,等到需要用到时,很难记起它的密码.特在此记录下忘记密码后的操作 1. 先停止mysql服务 2. 运行 mysqld -nt skip-grant-tables 不 ...

  10. (转)使用Cobbler批量部署Linux和Windows:Cobbler服务端部署(一)

    原文:http://www.cnblogs.com/pluse/p/8316914.html http://blog.51cto.com/dreamway/1166589---------Cobble ...