热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用栈实现计算器(calculator)二:十进制数字的加减乘除

1.简述 上一篇文章里将科学计算器的实现分为了两部分:1.中缀算术表达式改写为后缀算术表达式 2.计算后缀算术表达式 并且给出了个位数的加减乘基本的实现。这一篇将利用牛客网的编程题目&#
1.简述

上一篇文章里将科学计算器的实现分为了两部分:1.中缀算术表达式改写为后缀算术表达式 2.计算后缀算术表达式
并且给出了个位数的加减乘基本的实现。这一篇将利用牛客网的编程题目,给出后缀运算表达式对于十进制数字(可以多于一位)的加减乘除(整形除法)运算。
题目:[编程题]Emacs计算器 https://www.nowcoder.com/questionTerminal/1a92fbc771a54feb9eb5bd9b3ff2d0a9?toCommentId=3049917
github:https://github.com/AnkangH/CSDN/blob/master/%E5%88%A9%E7%94%A8%E6%A0%88%E5%AE%9E%E7%8E%B0%E8%AE%A1%E7%AE%97%E5%99%A8/02.%E8%AE%A1%E7%AE%97%E5%90%8E%E7%BC%80%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E5%80%BC.cpp

2.实现

2.1 获取输入

输入的格式为以空格区分的字符串 如 111 21 *并且数目已知。因为每个字符串之间有空格区分。可以很好的满足cin>>string,因此使用vector保存一个完整的后缀算术表达式,其中的每个元素为操作数或是运算符,不包含空格。

2.2 输入的分类

输入有两种,操作数和运算符。对于操作数,需要将string转换为int,使用库函数或者自己写均可。如“103”,size=2,int=1*10^2+0*10^1+3*10^0=sum(str[i]*pow(10,size-1-i)),i=0,1,...,size-1。对于运算符,要注意,即便只有一个字符, 也是字符串而不是字符。“a”是字符串,而不是‘a’。字符串不可赋值字符,不可与字符比较。

int str2dec(string str)
{int size = str.size();int res = 0;for (int i = 0; i }

2.3 计算后缀算术表达式

如同上一篇文章所讲的,遍历表达式,如果是数字则入栈,如果是运算符,那么取栈顶两个元素(栈顶和次栈顶)做运算符的运算,栈顶两元素出栈,运算结果入栈。最后,栈顶的元素即为运算结果。注意加法和乘法对运算数的前后没有要求,而减法和除法对运算数的前后有要求。根据后缀表达式的构建原则,如中缀表达式a-b改写为后缀表达式 ab-,又后缀表达式从左到右入栈,所以b在栈顶 a在其下。令栈顶元素为被减数或被除数,次栈顶元素为减数和除数。

int computeSuffix(vector str)
{int size = str.size();stack st;for (int i = 0; i }

2.4测试

#include //for cout endl
#include //for stack
#include// for string
#include//for vector
#include //for pow()
using namespace std;
string mid2back(string);//中缀计算表达式转后缀计算表达式
int compute(string);//计算后缀表达式
int computeSuffix(vector);//计算后缀表达式 int整数多于1位 + - * /
bool priority(char a, char b);//辅助函数 判断两个运算符的优先级
int str2dec(string);
int main()
{vector str &#61; { "10","11","21","12","-","5","*","&#43;","44","&#43;","*" };//str&#61;10*(11&#43;(21-12)*5&#43;44)&#61;1000cout <}


推荐阅读
author-avatar
大市低开_127
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有