博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算(calc.cpp)
阅读量:6072 次
发布时间:2019-06-20

本文共 1955 字,大约阅读时间需要 6 分钟。

计算(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的范围内。
 
1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 int number[101],i=0, p=1; 8 char symbol[101],s[256],t[256]; 9 //p:指向当前的运算符,同时指向当前运算符所对应的操作数 10 void push() //算符入栈运算11 {12 symbol[++p]=s[i];13 }14 void pop() //运算符栈顶元素出栈,并取出操作数栈元素完成相应的运算15 {16 switch (symbol[p--])//运算完成之后扔掉运算符,也标志着需要运算的数已经运算完成 17 {18 case '+':19 {20 number[p]+=number[p + 1];21 break; 22 }23 case '-':24 {25 number[p]-=number[p + 1];26 break; 27 }28 case '*':29 {30 number[p]*=number[p + 1];31 break;32 }33 case '/':34 {35 number[p]/=number[p + 1];36 break;37 }38 case '^':39 {40 number[p]=pow(number[p],number[p + 1]);41 }42 }43 }44 bool can() //判断运算符的优先级别,建立标志函数,能否进行运算 45 {46 if ((s[i]=='+'||s[i]=='-')&&symbol[p]!='(') //在括号之内 47 return 1;48 if ((s[i]=='*'||s[i]=='/')&&(symbol[p]=='*'||symbol[p]=='/'))49 //若遇到乘除且p对应的恰好是乘除 50 return 1;51 return 0;52 }53 main()54 { 55 printf("String :");gets(s);56 s[strlen(s)]=')';57 symbol[p]='(';58 while (i
='0'&&s[i]<='9') //取数入操作数栈67 x=x*10+s[i++]-'0';68 number[p]=x;69 do70 { 71 if (s[i]==')') //当右括号后面还有右括号时处理72 {73 while (symbol[p]!='(') 74 pop();//当括号内还有算式没有算完时进行运算 75 number[--p]=number[p + 1];//当运算完成以后左括号已经没有意义,所以将指针p移向前一个运算符,并复制所得的结果 76 }77 else78 { //根据标志函数值作运算符入栈或出栈运算处理79 while (can()) 80 pop();// 当可以进行运算时运算,然后压入一个运算符 81 push();82 }83 i++;84 }while (i

 

转载地址:http://guigx.baihongyu.com/

你可能感兴趣的文章
本地连接linux虚拟机的方法
查看>>
某公司面试java试题之【二】,看看吧,说不定就是你将要做的题
查看>>
BABOK - 企业分析(Enterprise Analysis)概要
查看>>
Linux 配置vnc,开启linux远程桌面
查看>>
NLog文章系列——如何优化日志性能
查看>>
Hadoop安装测试简单记录
查看>>
CentOS6.4关闭触控板
查看>>
ThreadPoolExecutor线程池运行机制分析-线程复用原理
查看>>
React Native 极光推送填坑(ios)
查看>>
Terratest:一个用于自动化基础设施测试的开源Go库
查看>>
修改Windows远程终端默认端口,让服务器更安全
查看>>
扩展器必须,SAS 2.0未必(SAS挺进中端存储系统之三)
查看>>
Eclipse遇到Initializing Java Tooling解决办法
查看>>
while((ch = getchar()) != '\n')
查看>>
好程序员web前端分享JS检查浏览器类型和版本
查看>>
Oracle DG 逻辑Standby数据同步性能优化
查看>>
exchange 2010 队列删除
查看>>
android实用测试方法之Monkey与MonkeyRunner
查看>>
「翻译」逐步替换Sass
查看>>
H5实现全屏与F11全屏
查看>>