#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stack>
using namespace std;
int get_priority(char &op) {
if (op == '+' || op == '-') return 1;
if (op == '*' || op == '/') return 2;
}
double cul(double &a, double &b, char &op) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/' :
return a / b;
}
}
int main() {
char s[1000];
while (gets(s) ) {
if (strlen(s)== 1 && s[0] == '0') break;
stack<double> nums;
stack<char> ops;
int n = strlen(s);
for (int i = 0; i < n; ++i) {
if (s[i] == ' ') continue;
else if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') {
//pop
while (!ops.empty() && get_priority(ops.top()) >= get_priority(s[i])) {
char op = ops.top();
ops.pop();
double n1, n2;
n2 = nums.top();
nums.pop();
n1 = nums.top();
nums.pop();
double ans = cul(n1, n2, op);
nums.push(ans);
}
ops.push(s[i]);
} else {
double temp = 0;
while (s[i]!= ' ' && i < n){
temp = temp * 10 +(s[i++]-'0');
}
nums.push(temp);
}
}
while (!ops.empty()) {
char op = ops.top();
ops.pop();
double n1, n2;
n2 = nums.top();
nums.pop();
n1 = nums.top();
nums.pop();
double ans = cul(n1, n2, op);
nums.push(ans);
}
printf("%.2lf\n", nums.top());
}
return 0;
}
问题 A: 简单计算器
最新推荐文章于 2024-10-18 18:23:24 发布