欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

进阶实验3-3.1-求前缀表达式的值-编程题

程序员文章站 2022-06-07 20:54:05
...

进阶实验3-3.1-求前缀表达式的值-编程题

解题代码

#include<iostream>
#include<string>
#include<stack>
#include<stdio.h>
using namespace std;
int main()
{
	stack<double> s;
	string a[30];
	int n = 0;
	double temp, temp1, temp2;
	bool flag = true;
	while (cin >> a[n++]) {};
	n--;
	for (int i = n - 1; i >= 0; i--) {
		if (a[i].length()==1 && (a[i][0] == '-' || a[i][0] == '+' || a[i][0] == '*' || a[i][0] == '/')) {
			if (s.size() < 2) {
				flag = false;
				break;
			}
			temp1 = s.top(); s.pop();
			temp2 = s.top(); s.pop();
			if (temp2 == 0 && a[i][0] == '/') {
				flag = false;
				break;
			}
			switch (a[i][0]) {
			case '+':temp = temp1 + temp2; s.push(temp); break;
			case '-':temp = temp1 - temp2; s.push(temp); break;
			case '*':temp = temp1 * temp2; s.push(temp); break;
			case '/':temp = temp1 / temp2; s.push(temp); break;
			}
		}
		else {
			temp = stof(a[i]);
			s.push(temp);
		}
	}
	if (s.size() != 1) flag = false;
	if (flag) printf("%.1f", s.top());
	else cout << "ERROR";
	return 0;
}

测试结果

进阶实验3-3.1-求前缀表达式的值-编程题

问题整理

1.+1、-1也要当作数字处理。
2.非正常退出的三种情况:除数为零、操作数缺失、操作数有多余。