题目描述
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
输入描述:
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
输出描述:
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
示例1
输入
1 + 2
4 + 2 * 5 - 7 / 11
0
输出
3.00
13.36
题目解析:和加减乘除相似,不过因为输入格式为1 + 2中间有空格,所以使用cin进行输入
代码:
#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<iostream>
#include<iomanip>
#include<vector>
#include<map>
#include<stack>
#include<queue>
using namespace std;
const int N = 200;
int main()
{
double number;
char fuhao;
double d[N];
while(cin >> number){
d[0] = number;
int count = 0;
while(cin >> fuhao){
char c = cin.get();
if(c == '\n'){
break;
}
cin >> number;
if(fuhao == '+'){
d[++count] = number; //这里写成++i的原因,先+1,再保存值,这样如果下次输入符号*,就可以与此时count上的值相乘
}else if(fuhao == '-'){ //如果先保存,再+1,则下次输入乘号,他找不到相乘的数。还不懂,自己运行看
d[++count] = -number;
}else if(fuhao == '*' ){
d[count] *= number;
}else if(fuhao == '/'){
d[count] /= number;
}
}
double sum = 0;
for(int i = 0; i <= count; i++){
sum += d[i];
}
cout << fixed << setprecision(2);
cout << sum << endl;
}
return 0;
}