文档章节

加减乘除科学计算

能东棍
 能东棍
发布于 2017/05/17 17:22
字数 316
阅读 20
收藏 0
点赞 0
评论 0
#include<iostream>
#include<stack>
#include <string>
#include <vector>


//判断 new_op > old_op
bool CompareOp(const std::string& new_op, const std::string& old_op)
{
	if (new_op == "+" || new_op == "-")
	{
		if (old_op == "+" || old_op == "-" || old_op == "/" || old_op == "*")
		{
			return false;
		}
		else
		{
			return true;
		}
	}
	else
	{
		if (old_op == "/" || old_op == "*")
		{
			return false;
		}
		else
		{
			return true;
		}
	}


}

//中缀转后缀
std::vector<std::string> InfixToPostfix(const std::vector<std::string>& infix_list)
{
	std::vector<std::string> result;
	std::stack<std::string> operator_stack;

	for (const auto& input : infix_list)
	{	
		if (input == "+" || input == "-" || input == "*" || input == "/")
		{
			while (true)
			{
				if (operator_stack.empty())
				{
					operator_stack.push(input);
					break;
				}
				else
				{	
					//比较当前运算符和栈顶的运算符的优先级,栈顶优先级大于等于当前的运算符时,写入结果中
					const auto& top_operator = operator_stack.top();
					if (CompareOp(input, top_operator))
					{
						operator_stack.push(input);
						break;
					}
					else
					{
						result.push_back(top_operator);
						operator_stack.pop();
					}
				}
			}
		}
		else
		{
			//数字直接写入结果中
			result.push_back(input);
		}
	}

	while (!operator_stack.empty())
	{
		result.push_back(operator_stack.top());
		operator_stack.pop();
	}
	
	return std::move(result);
}


//计算后缀表达式的结果
float CalcPostFix(std::vector<std::string> infix_list)
{
	std::stack<float> number_stack;
	for (auto input : infix_list)
	{
		if (input == "+" || input == "-" || input == "*" || input == "/")
		{	
			//遇到运算符, 弹出栈顶的两个数字进行计算,并把计算结果入栈
			//注意顺序,先弹出的应该是是右边的数字
			auto num2 = number_stack.top();
			number_stack.pop();

			auto num1 = number_stack.top();
			number_stack.pop();

			if (input == "+")
			{
				number_stack.push(num1+num2);
			}
			else if (input == "-")
			{
				number_stack.push(num1 - num2);
			}
			else if (input == "*")
			{
				number_stack.push(num1 * num2);
			}
			else if (input == "/")
			{
				number_stack.push(num1/num2);
			}
		}
		else
		{
			//数字直接入栈
			char* end;
			number_stack.push(std::strtof(input.c_str(), &end));
		}
	}

	return std::move(number_stack.top());
}

int main()
{
	const std::vector<std::string>  infix_list = { "4.2", "*", "5", "-", "6", "*", "2"};
	auto result = InfixToPostfix(infix_list);
	std::cout << CalcPostFix(result) << '\n';
	return 0;
}

© 著作权归作者所有

共有 人打赏支持
能东棍
粉丝 7
博文 33
码字总数 24258
作品 0
南京
程序员
Java中的陷阱题

1、找奇数: public static boolean isOdd(int i){return i % 2 == 1;}上面的方法真的能找到所有的奇数么? A:没有考虑到负数问题,如果i为负则不正确。应该return i%2 == 0 2. 浮点数相减 ...

Hosee ⋅ 2016/02/17 ⋅ 0

我来阅读lodash源码——Math(一)

源码注释版 这一组函数都是数学计算相关的,主要分为三类: 加减乘除:、、、 求最大最小平均值:、、、、、、、 小数的四舍五入:、、 加减乘除 在加减乘除的源码中可以看到这四个函数都引用...

axuebin ⋅ 2017/11/28 ⋅ 0

我来阅读lodash源码——Math(一)

## 源码注释版 这一组函数都是数学计算相关的,主要分为三类: 加减乘除:、、、 求最大最小平均值:、、、、、、、 小数的四舍五入:、、 加减乘除 在加减乘除的源码中可以看到这四个函数都...

axuebin ⋅ 2017/11/27 ⋅ 0

JavaScript四舍五入的那些坑

前言 经常使用JavaScript用来处理数字的程序员都知道,JavaScript的,这一函数,在格式化数字时,会自动进行四舍五入,例如: 但是在某些情况下,其四舍五入的结果,往往都不尽人意,例如: ...

光哥很霸气 ⋅ 2017/11/09 ⋅ 0

python 函数的封装

python 函数的封装 假设 使用python编写一独立加减乘除运算代码(不想让人家看到我的计算过程) 而另外使用python封装一个exe程序 调用该加减乘除代码的运算结果 该加减成除代码应如何封装 ...

代码堆里睡觉的人 ⋅ 2013/01/07 ⋅ 1

Java中浮点型数据Float和Double进行精确计算的问题

一、浮点计算中发生精度丢失 大概很多有编程经验的朋友都对这个问题不陌生了:无论你使用的是什么编程语言,在使用浮点型数据进行精确计算时,你都有可能遇到计算结果出错的情况。来看下面的...

Junn ⋅ 2013/06/10 ⋅ 1

Java BigDecimal详解

一、引言 借用《Effactive Java》这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而...

JackieYeah ⋅ 2014/03/05 ⋅ 7

计算加减乘除【果果老师】

公众号:果果老师 大家好,我是果果老师 今天的少儿编程课的内容为:计算加减乘除 视频课程 计算加减乘除【果果老师】_腾讯视频 https://v.qq.com/x/cover/h0533h2t838/h0533h2t838.html 该课...

果果老师 ⋅ 2017/08/03 ⋅ 0

Google 更新算术 OneBox,加入 34 键虚拟计算器

即便是很一般的三级谷粉也应该知道,Google可以帮你做算术,在搜索框里输入加减乘除甚至是一些简单的方程式都可以得到答案。现在Google继续将这个算术OneBox功能做强做大,现在不仅会显示出答...

oschina ⋅ 2012/07/26 ⋅ 10

使用servlet和JSP实现加减乘除运算

用ava将计算器扩展为网页形式,让用户可以在浏览器内做加减乘除计算。(涉及Servlet技术及Tomcat容器的运用),用jsp实现计算器的基本框架,再调用servlet的计算结果,急求!谢谢...

0915051 ⋅ 2011/07/11 ⋅ 5

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Mahout推荐算法API详解

前言 用Mahout来构建推荐系统,是一件既简单又困难的事情。简单是因为Mahout完整地封装了“协同过滤”算法,并实现了并行化,提供非常简单的API接口;困难是因为我们不了解算法细节,很难去根...

xiaomin0322 ⋅ 22分钟前 ⋅ 0

WampServer默认web服务器根目录位置

安装WampServer之后的web服务器根目录默认位置在WampServer安装目录下的www:

临江仙卜算子 ⋅ 24分钟前 ⋅ 0

Redux的一些手法记录

Redux Redux的基本概念见另一篇文。 这里记录一下Redux在项目中的实际操作的手法。 actions 首先定义action.js,actions的type,可以另起一个action-type.js文件。 action-type.js用来存...

LinearLaw ⋅ 25分钟前 ⋅ 0

android 手势检测(左右滑动、上下滑动)

GestureDetector类可以让我们快速的处理手势事件,如点击,滑动等。 使用GestureDetector分三步: 1. 定义GestureDetector类 2. 初始化手势类,同时设置手势监听 3. 将touch事件交给gesture...

王先森oO ⋅ 39分钟前 ⋅ 0

java 方法的执行时间监控 设置超时(Future 接口)

java 方法的执行时间监控 设置超时(Future 接口) import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor......

青峰Jun19er ⋅ 43分钟前 ⋅ 0

一名开源小白的Apache成长自述

今天收到了来自Apache Vote我成为Serviceomb项目Committer的邮件,代表自己的贡献得到了充分的肯定;除了感谢团队的给力支持,我更希望将自己的成长经历——如何践行Apache Way的心得介绍给大...

微服务框架 ⋅ 46分钟前 ⋅ 0

vim介绍、颜色显示和移动光标、一般模式下复制、剪切和粘贴

1.vim 是 vi 的升级版 vim 是带有颜色显示的 mini安装的系统,一般都不带有vim [root@aminglinux-128 ~]# yum install -y vim-enhanced已加载插件:fastestmirror, langpacksLoading mir...

oschina130111 ⋅ 46分钟前 ⋅ 0

Deepin 操作系统四面楚歌

作为国内做的最好的 Linux 发行版,源自 Debian sid 的 Deepin 目前正面临重重困境,新版本不断延期,开发人员离职,bug 长期得不到修复,和 Debian/Ubuntu 的兼容性问题也面临越来越严重的挑...

六库科技 ⋅ 46分钟前 ⋅ 0

MyBatis之动态sql

我们需要知道的是,使用mybatis重点是对sql的灵活解析和处理。在原先的UserMappser.xml中,我们这样查询表中满足条件的记录 : 123 <select id="findUserList" parameterType="userQuery...

瑟青豆 ⋅ 47分钟前 ⋅ 0

这届俄罗斯世界杯的冷门那么多怎么办?

最纯粹的世界杯,最神奇的大冷门。 德国0比1被墨西哥摩擦了。 日本历史性的赢了哥伦比亚。 C罗也挑平了西班牙。 梅西被冰岛狮吼吼愣神了。 就连11次进世界杯4强的巴西也被瑞士逼平了。 天台已...

开源中国众包平台 ⋅ 47分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部