前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单计算器 C++ 你是真的会玩坑

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

作者头像
叶茂林
发布2023-07-30 11:23:20
1830
发布2023-07-30 11:23:20
举报

题目描述

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

输入

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

输出

在一行中输出算式的运算结果,或者如果除法分母为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;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 思路分析
  • AC代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档