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

计算表达式(上交复试上机)

程序员文章站 2024-02-17 11:58:52
...

前言:

21考研,不论能否进复试记录一下准备路上写下的垃圾代码。本来啃《算法笔记》,但是感觉太多了做不完,改做王道机试指南。

题目描述:

对于一个不存在括号的表达式进行计算

输入描述

存在多种数据,每组数据一行,表达式不存在空格

输出描述:

输出结果

解答

#include<iostream>
#include<string>
#include<vector>
#include<stack>
using namespace std;

void cal(stack<char>& sym, stack<double>& num) {
	double right, left;
	right = num.top();
	num.pop();
	left = num.top();
	num.pop();
	if (sym.top() == '+')
		num.push(right + left);
	else if (sym.top() == '-')
		num.push(left - right);
	else if (sym.top() == '*')
		num.push(left * right);
	else num.push(left / right);
	sym.pop();
}
int main() {
	string str, temp = "";
	getline(cin, str);
	stack<double> num;
	stack<char> sym;
	double t = 0, left, right;
	for (int i = 0; i < str.length(); i++) {

		if (str[i] >= '0' && str[i] <= '9') {
			while (str[i] >= '0' && str[i] <= '9') {
				temp += str[i];
				i++;
				if (i == str.length())
					break;
			}
			num.push(stoi(temp));
			temp = "";
			i--;
		}
		else {
			if (str[i] == '/' || str[i] == '*') {
				if (sym.empty() == true || sym.top() == '+' || sym.top() == '-')
					sym.push(str[i]);
				else
				{
					while (sym.empty() == false && (sym.top() == '*' || sym.top() == '/'))
						cal(sym, num);
					sym.push(str[i]);
				}
			}
			else {
				while (sym.empty() == false)
					cal(sym, num);
				sym.push(str[i]);
			}
		}
	}
	while (sym.empty() == false)
		cal(sym, num);
	printf("%.0lf\n", num.top());
	return 0;
}