求解逆波兰表达式的值,回文数字的判断&&栈的应用
2015-06-21 15:30
225 查看
常规数学表达式的前缀表达式称为波兰表示式,后缀表达式又称逆波兰表达式。对于逆波兰表达式的求解可借助于栈,把数字全部压入栈中,遇到计算符号再弹出两个数,计算结果压入栈中,重复这个过程,最后的数字就是计算结果。
例子: 3-(4+8/2)*3=-21 48/3+12-6*2+7=23
输入文件内容:
3 4 8 2 / + 3 * - EOF
48 3 / 12 + 6 2 * - 7 + EOF
回文数字的判断:
例子: 3-(4+8/2)*3=-21 48/3+12-6*2+7=23
输入文件内容:
3 4 8 2 / + 3 * - EOF
48 3 / 12 + 6 2 * - 7 + EOF
#include <iostream> #include<cstdio> #include<cstdlib> using namespace std; bool judge(int x){ if(x=='+'||x=='-'||x=='*'||x=='/')return true; return false; } int solve(){ int stack[101],top=0; char a[20]; //'+'-->43 '-'-->45 '*'-->42 '/'-->47 ' '-->32 '0'-->48 '\n'-->10 while(~scanf("%s",&a)){ if(a[0]==' ')continue; if(a[0]=='E')break; int b=atoi(a); if(judge(a[0])){ int q2=stack[top--],q1=stack[top--],q3; if(a[0]=='+')q3=q1+q2; else if(a[0]=='-')q3=q1-q2; else if(a[0]=='*')q3=q1*q2; else q3=q1/q2; stack[++top]=q3; } else stack[++top]=b; //for(int i=1;i<=top;i++)cout<<stack[i]<<' '; cout<<endl; } return stack[1]; } int main(int argc, char *argv[]){ freopen("cin.txt","r",stdin); printf("%d\n",solve()); printf("%d\n",solve()); return 0; }回文数字:反着念和正着念的结果一样。这又和栈联系到了一起。把数字存储到栈中,如果新的数字和栈顶数字一样或新的数字和栈顶数字的“顶下"数字一样,那么涉及的数字都弹出,若栈中没有了数字则是一个回文数,否则不是。
回文数字的判断:
int stack[151],top=0; bool judge(){ top=0; int a; while(cin>>a){ if(a==-1)break; if(top>0&&a==stack[top])top--; else if(top>1&&a==stack[top-1]){ top=top-2; } else stack[++top]=a; } if(top==0)return true; else return false; }
相关文章推荐
- 【VB.NET机房重构】DataGridView导出Excel
- Android中Serializable和Parcelable的用法及区别
- wireshark教程
- UIView 的旋转与缩放以及同时应用两种效果
- Mysql-linux下密码修改,忘记密码修改,超级管理用户修改
- linux进入软连接所指向的原目录
- absolute元素,居中
- C语言回顾(五、函数,递归,Hanoi汉诺塔,整数转字符串)——iOS开发基础
- 7. Reverse Integer
- jsp——学习篇:建立第一个jsp程序
- 黑马day06 张孝祥老师编写的EL函数标签库
- 《Android系统开发》笔记
- Day7(上).二级指针实战
- Java语言中的修饰符
- DWZ使用注意事项
- 四大自贸区的好处
- java final的使用
- navicat如何导入sql文件和导出sql文件
- Linux系统下 SVN 搭建(yum)安装
- 第十六周项目一--平方根的异常