读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample
Inputcopy | Outputcopy |
---|---|
1 + 2 4 + 2 * 5 - 7 / 11 0 | 3.00 13.36 |
接下来给同学们放下代码
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int main()
{
char keep1,keep2;
vector<char>syb;
vector<double>num;
while(1){
num.clear();
while(1){
double n;
scanf("%lf",&n);
num.push_back(n);//读入数字
keep1=getchar();//判断是不是回车
if(keep1=='\n') break;
char s;
s=getchar();
syb.push_back(s);
keep2=getchar();
}
//cout << syb[0];
for(int i=0;i<syb.size();){
if(syb[i]=='*'){
syb.erase(syb.begin()+i);
num[i]=num[i]*num[i+1];
num.erase(num.begin()+i+1);
continue;
}
if(syb[i]=='/'){
syb.erase(syb.begin()+i);
num[i]=num[i]/num[i+1];
num.erase(num.begin()+i+1);
continue;
}
i++;
}
for(int i=0;i<syb.size();){
if(syb[i]=='+'){
syb.erase(syb.begin()+i);
num[i]=num[i]+num[i+1];
num.erase(num.begin()+i+1);
continue;
}
if(syb[i]=='-'){
syb.erase(syb.begin()+i);
num[i]=num[i]-num[i+1];
num.erase(num.begin()+i+1);
continue;
}
i++;
}
if(num[0]==0) break;
printf("%.2f\n",num[0]);
}
return 0;
}