06 复试 简单计算器
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
样例输入
1 + 2
4 + 2 * 5 - 7 / 11
0
样例输出
3.00
13.36
思路:由于是非负数参与,将运算符转化成负数,便于存储处理。
先扫描一遍将所有乘除法解决,废弃的内容标记成一个负数。再扫描一遍运算加减法。
#include<iostream>using namespace std;#include<vector>#include<stdio.h>#include<map>vector<double> v;void cal(vector<double> v){double res=0;int op;//cal * and /for(int i=0;i<v.size();i++){if(v[i]==-3){v[i+1] = v[i-1]*v[i+1];v[i] = -5;v[i-1] = -5;}else if(v[i]==-4){v[i+1] = v[i-1]/v[i+1];v[i] = -5;v[i-1] = -5;}}for(int i=0;i<v.size();i++){if(v[i]!=-5){res = v[i];break;}}op = 0;//cal + and -for(int i=1;i<v.size();i++){if(v[i]==-1)op = -1;else if(v[i]==-2)op = -2;else if(v[i] != -5){if(op == -1)res+=v[i];else if(op == -2)res-=v[i];}}printf("%.2f\n",res);}int main(){double num;char op;char ch;while(1){cin>>num;v.clear();v.push_back(num);ch = getchar();if(num==0&&ch=='\n')break;while(ch!='\n'){cin>>op;if(op =='+')v.push_back(-1);else if(op =='-')v.push_back(-2);else if(op=='*')v.push_back(-3);else if(op=='/')v.push_back(-4);cin>>num;v.push_back(num);ch = getchar();}cal(v);}}