简单计算器
来源:互联网 发布:网络弊大于利反方辩词 编辑:程序博客网 时间:2024/05/16 07:19
感觉这个过程好长,估计如果真的机试这题,我可能做不出来。。。
还有点小问题,也不想找了。。。。
我这个不合格的程序员。。。
#include<stdio.h>#include<stack>using namespace std;char str[101];int mat[][5]={ 1,0,0,0,0, 1,0,0,0,0, 1,0,0,0,0, 1,1,1,0,0, 1,1,1,0,0,};stack<int> op;stack<double> in;void getOp(bool &reto,int &retn,int i){ if(i==0&&op.empty()==true){ reto=true; retn=0; return; } if(str[i]==0){ reto=true; retn=0; return; } if(str[i]>='0'&&str[i]<='9') reto=false; else{ reto=true; if(str[i]=='+') retn=1; else if(str[i]=='-') retn=2; else if(str[i]=='*') retn=3; else if(str[i]=='/') retn=4; i+=2; return; } retn=0; for(;str[i]!=' '&&str[i]!=0;i++){ retn*=10; retn+=str[i]-'0'; } if(str[i]==' ') i++; return;}int main(){ while(gets(str)){ if(str[0]=='0'&&str[1]==0) break; bool retop; int retnum; int index=0; while(!op.empty()) op.pop(); while(!in.empty()) in.pop(); while(true){ getOp(retop,retnum,index); if(retop==false) in.push((double)retnum); else{ double tmp; if(op.empty()==true||mat[retnum][op.top()]==1){ op.push(retnum); } else{ while(mat[retnum][op.top()]==0){ int ret=op.top(); op.pop(); double b=in.top(); in.pop(); double a=in.top(); in.pop(); if(ret==1) tmp=a+b; else if(ret==2) tmp=a-b; else if(ret==3) tmp=a*b; else tmp=a/b; } op.push(retnum); } } if(op.size()==2&&op.top()==0) break; } printf("%.2f\n",in.top()); } return 0;}/*1 + 24 + 2 * 5 - 7 / 11*/
0 0
- 简单计算器
- 简单计算器
- 简单计算器
- 简单计算器
- 简单计算器
- 简单计算器
- 简单计算器
- 简单计算器
- 简单计算器
- 简单计算器
- 简单计算器
- 简单计算器
- 简单计算器
- 简单计算器
- 简单计算器
- 简单计算器
- 简单计算器
- 简单计算器
- Windows 没有激活会造成 WSUS 控制台打不开
- AFN3.0API调用
- python GIL 全局锁
- 关于线程的问题
- 使用Windbg寻找高CPU占用线程
- 简单计算器
- 解决Eclipse+JDK 32 bit+hadoop 32bit 遇到org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lan
- [Leetcode] 319. Bulb Switcher
- Ignoring query to other database
- IQKeyboardManager
- [java源码分析]HashMap源码分析
- Android中dip、dp、sp、pt和px的区别
- 深入浅出学Hive——Hive优化
- ByteBuffer常用方法详解