简单计算器 C++ 你是真的会玩坑

题目描述

模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。

输入

输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。

输出

在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。

输入样例1

1+2*10-10/2=

输出样例1

10

思路分析

应该不止我一个人没看到四种运算符的优先级相同这句话吧……我艰辛的写完正常版本才发现不太对劲T_T

这句话意味着,它只是单纯的从左到右算。

好了,我觉得难点在于把数分离出来,我采用的是递归的方法算出每一个单独的数:只要下一个是数字,我就继续算下去,直到找到不是数字的字符。

AC代码

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;
int value(int&i, string&formula, int element) {
	element = element * 10 + formula[i++] - '0';
	if (isdigit(formula[i])) {
		return value(i, formula, element);
	} else {
		i--;
		return element;
	}
}
int main() {
	int result = 0;
	string formula;
	cin >> formula;
	for (int i = 0; i < formula.size() - 1; i++) {
		if (formula[i] == '+' || formula[i] == '-' || formula[i] == '*' || formula[i] == '/' && formula[i + 1] != '0' || isdigit(formula[i]))
			continue;
		else {
			cout << "ERROR";
			return 0;
		}
	}
	for (int i = 0; i < formula.size() - 1; i++) {
		if (isdigit(formula[i])) {
			result += value(i, formula, 0);
		} else if (formula[i] == '-' && isdigit(formula[++i])) {
			result -= value(i, formula, 0);
		} else if (formula[i] == '*' && isdigit(formula[++i])) {
			result *= value(i, formula, 0);
		} else if (formula[i] == '/' && isdigit(formula[++i])) {
			result /= value(i, formula, 0);
		}
	}
	cout << result;
}