首页 > 代码库 > 简单计算器
简单计算器
- 题目描述:
- 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
- 输入:
- 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
- 输出:
- 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
- 样例输入:
1 + 24 + 2 * 5 - 7 / 110
- 样例输出:
3.0013.36
Code:#include <cstdio>#include <cstring>#include <stack> using namespace std; int compare[][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> Operation;stack<double> Number; void getNext(char str[],bool &retOp,int &retNum,int &index){ //函数结束时,如果retOp为true,说明该字符为 if(index==0&&Operation.empty()==true){ //运算符,retNum为运算符编号;如果retOp为false, retOp=true; //说明该字符是数字,retNum为该数字大小 retNum=0; return; } if(str[index]==0){ retOp=true; retNum=0; return; } if(str[index]>=‘0‘&&str[index]<=‘9‘){ retOp=false; }else{ retOp=true; if(str[index]==‘+‘) retNum=1; if(str[index]==‘-‘) retNum=2; if(str[index]==‘*‘) retNum=3; if(str[index]==‘/‘) retNum=4; index=index+2; return; } retNum=0; for( ;str[index]!=‘ ‘&&str[index]!=0;++index){ retNum=retNum*10; retNum=retNum+str[index]-‘0‘; } if(str[index]==‘ ‘) ++index; return;} int main(){ const int arrSize=210; char str[arrSize]; while(gets(str)){ if(str[0]==‘0‘&&str[1]==0) break; bool retOp; int retNum; int index=0; while(Operation.empty()==false) Operation.pop(); while(Number.empty()==false) Number.pop(); while(true){ getNext(str,retOp,retNum,index); if(retOp==false){ Number.push((double)retNum); }else{ if(Operation.empty()==true||compare[retNum][Operation.top()]==1){ Operation.push(retNum); }else{ double temp=0.0; while(compare[retNum][Operation.top()]==0){ int op=Operation.top(); Operation.pop(); double b=Number.top(); Number.pop(); double a=Number.top(); Number.pop(); if(op==1) temp=(double)a+b; if(op==2) temp=(double)a-b; if(op==3) temp=(double)a*b; if(op==4) temp=(double)a/b; Number.push((double)temp); } Operation.push(retNum); } } if(Operation.size()==2&&Operation.top()==0) break; } printf("%.2f\n",Number.top()); } return 0;} /************************************************************** Problem: 1019 User: lcyvino Language: C++ Result: Accepted Time:0 ms Memory:1524 kb****************************************************************/
简单计算器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。