【数学】 【分数】 【字符串】972. 相等的有理数

本文涉及知识点

数学 分数 字符串

LeetCode972. 相等的有理数

给定两个字符串 s 和 t ,每个字符串代表一个非负有理数,只有当它们表示相同的数字时才返回 true 。字符串中可以使用括号来表示有理数的重复部分。
有理数 最多可以用三个部分来表示:整数部分 、小数非重复部分 和小数重复部分 <(><)>。数字可以用以下三种方法之一来表示:

例: 0 ,12 和 123
<.>
例: 0.5 , 1. , 2.12 和 123.0001
<.><(><)>
例: 0.1(6) , 1.(9), 123.00(1212)
十进制展开的重复部分通常在一对圆括号内表示。例如:

1 / 6 = 0.16666666… = 0.1(6) = 0.1666(6) = 0.166(66)

示例 1:
输入:s = “0.(52)”, t = “0.5(25)”
输出:true
解释:因为 “0.(52)” 代表 0.52525252…,而 “0.5(25)” 代表 0.52525252525…,则这两个字符串表示相同的数字。
示例 2:
输入:s = “0.1666(6)”, t = “0.166(66)”
输出:true
示例 3:
输入:s = “0.9(9)”, t = “1.”
输出:true
解释:“0.9(9)” 代表 0.999999999… 永远重复,等于 1 。[有关说明,请参阅此链接]
“1.” 表示数字 1,其格式正确:(IntegerPart) = “1” 且 (NonRepeatingPart) = “” 。
提示:

每个部分仅由数字组成。
整数部分 不会以零开头。(零本身除外)
1 <= .length <= 4
0 <= .length <= 4
1 <= .length <= 4

循环小数变分数

令 x = 0.(abcd)。则 10000 × \times × x = abcd.(abcd) = abcd + x
→ \rightarrow 10000x = abcd+x → \rightarrow x = abcd/9999。
将小数转成分数,再比较,这样比较稳妥。 时间上用double 也可以。

代码

核心代码

class Solution {
public:
	bool isRationalEqual(string s, string t) {
		double d1 = Parse(s);
		double d2 = Parse(t);
		return abs(d1 - d2) < 0.001 * 0.001 * 000.1 * 0.1;
	}
	double Parse(string s)
	{
		double dRet = 0;
		int iPos = s.find('.');
		string strInt = s.substr(0, (-1 == iPos) ? s.length() : iPos);
		dRet += atoi(strInt.c_str());
		if (-1 == iPos)
		{
			return dRet;
		}
		s = s.substr(iPos + 1);
		iPos = s.find("(");
		string strNotRepeat = s.substr(0, (-1 == iPos) ? s.length() : iPos);
		dRet += atoi(strNotRepeat.c_str()) / pow(10.0, strNotRepeat.length());
		if (-1 == iPos)
		{
			return dRet;
		}
		s = s.substr(iPos + 1);
		s.pop_back();//除掉)
		dRet += atoi(s.c_str()) / (pow(10.0, s.length())-1) / pow(10.0, strNotRepeat.length());
		return dRet;
	}
};

template<class T,class T2>
void Assert(const T& t1, const T2& t2)
{
	assert(t1 == t2);
}

template<class T>
void Assert(const vector<T>& v1, const vector<T>& v2)
{
	if (v1.size() != v2.size())
	{
		assert(false);
		return;
	}
	for (int i = 0; i < v1.size(); i++)
	{
		Assert(v1[i], v2[i]);
	}

}

int main()
{
	string s, t;
	{
		Solution sln;
		s = "0.(52)", t = "0.5(25)";
		auto res = sln.isRationalEqual(s, t);
		Assert(true, res);
	}
	{
		Solution sln;
		s = "0.1666(6)", t = "0.166(66)";
		auto res = sln.isRationalEqual(s, t);
		Assert(true, res);
	}
	{
		Solution sln;
		s = "0.9(9)", t = "1.";
		auto res = sln.isRationalEqual(s, t);
		Assert(true, res);
	}
	{
		Solution sln;
		s = "8.123(4567)", t = "8.123(4566)";
		auto res = sln.isRationalEqual(s, t);
		Assert(false, res);
	}

	
}

2023年7月

class Solution {
public:
bool isRationalEqual(string s, string t) {
return abs(Parse(s) - Parse(t)) < 0.00000001;
}
double Parse(const string& s)
{
int iInt = 0;
int i = 0;
for (; ( i < s.length() ) && ( s[i] != ‘.’); i++ )
{
iInt = iInt * 10 + s[i] - ‘0’;
}
i++;
double d = 0;
double dMul =1;
for (; (i < s.length()) && (s[i] != ‘(’); i++)
{
dMul *= 0.1;
d += dMul * (s[i] - ‘0’);
}
i++;
double iCycMul = 1;
int iCyc = 0;
for (; (i < s.length()) && (s[i] != ‘)’); i++)
{
iCycMul *= 0.1;
iCyc = iCyc * 10 + s[i] - ‘0’;
}
if (iCyc > 0)
{
d += iCyc * iCycMul / (1 - iCycMul) * dMul;
}
return d + iInt;
}
};

扩展阅读

视频课程

有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快

速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

相关

下载

想高屋建瓴的学习算法,请下载《喜缺全书算法册》doc版
https://download.csdn.net/download/he_zhidan/88348653

我想对大家说的话
闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/493368.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

后端代码1

// 新增 public JsonResultVo<?> create(ApiIgnore RequestAttribute(ConstVal.REQ_USER) BaseUser baseUser,RequestBody IUTradeBuyPreserveVo iuTradeBuyPreserveVo) {//权限判断if (!baseCompanyService.dataPermission(baseUser, iuTradeBuyPreserveVo.getCompanyi…

JavaScript、ES6与微信小程序之间的联系:工具箱、升级与新房子

JavaScript、ES6和微信小程序三者之间有什么联系&#xff1f;我想&#xff0c;作为初学者还是有点蒙。下面作一个简单的分析&#xff0c;供大家参考。 首先,我们可以把JavaScript想象成一个非常强大的工具箱,里面装满了各种各样的工具。这些工具可以帮助我们完成各种任务,比如…

红外遥控NEC协议

红外遥控技术在我们的日常生活中应用非常广泛&#xff0c;比如我们的遥控器。通过遥控器发射红外光&#xff0c;电视&#xff0c;空调装有红外接收管&#xff0c;负责接受红外光。那么本节将重点介绍其中的原理。 一、工作原理 上图的HS0038便是装在空调&#xff0c;电视上的红…

Leo赠书活动-20期 《一本书掌握数字化运维方法,构建数字化运维体系》

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…

KingSCADA|如何以要求格式显示日期星期时间

哈喽,你好啊,我是雷工! 在做SCADA项目时,难免需要显示日期星期时间,如何通过系统变量转换为客户要求的格式显示。 下面以“YYYY-MM-DD 星期* 时:分:秒”的格式为例,介绍如何实现任意格式显示。 (一)效果演示 以下为以“YYYY-MM-DD 星期* 时:分:秒”的格式显示日期…

pytest教程-20-初识插件

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节&#xff0c;我们学习了pytest.ini配置文件的使用方法&#xff0c;本小节我们讲解一下pytest的插件功能。 pytest 插件为测试框架提供了额外的功能和扩展&#xff0c;使得测试过程更加强大、灵活和易于管…

IRIS / Chronicles 数据库结构

对于我们用得最多的关系型数据库来说&#xff0c;首先有的是数据库名字&#xff0c;然后是表名字&#xff0c;然后就是字段名&#xff0c;随后就是一条一条的数据。 对于 IRIS 来说&#xff0c;因为是使用的层级数据库&#xff0c;所以上面的定义就不能完全的照搬了&#xff0…

指针知识大礼包,让你的编程之路更顺畅(三)

1. 字符指针变量 2. 数组指针变量 3. ⼆维数组传参的本质 4. 函数指针变量 5. 函数指针数组 6. 转移表 正文开始 1. 字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针char* ; ⼀般使⽤: int main(){char ch w;char *pc &ch;*pc w;return 0; 还…

Linux-2 Linux的权限

目录 1.什么是权限&#xff1f; 2.权限的本质 3.Linux中的用户 普通用户与root用户相互转换 普通用户不变root&#xff0c;以root身份执行一个命令 LInux中的角色 4.Linux文件的权限 5.快速掌握修改权限的做法 修改权限 6.对比权限有无表现 对于普通用户&#xf…

RHCE-3-远程登录服务

简介 概念 远程连接服务器通过文字或图形接口方式来远程登录系统&#xff0c;让你在远程终端前登录linux主机以取得可操作主机接口&#xff08;shell&#xff09;&#xff0c;而登录后的操作感觉就像是坐在系统前面一样 功能: 分享主机的运算能力 服务器类型&#xff1a;有限…

抖店又开始清查违规了!想要避免这个问题,产品部分一定要做好!

大家好&#xff0c;我是电商小布。 最近一段时间&#xff0c;抖音平台又开始清查严重违规情况了&#xff0c;有很多在选品上打“擦边球”的商家都被关进了小黑屋。 主要就是产品上的高仿&#xff0c;模仿品牌的产品、外观&#xff0c;以及产品的图片&#xff0c;带有一些品牌…

【 Vue 】渲染器之挂载

渲染器之挂载 本章主要讲解渲染器将各种类型的 VNode 挂载为真实 DOM 的原理&#xff0c;阅读本章内容你将对 Fragment 和 Portal 有更加深入的理解&#xff0c;同时渲染器对有状态组件和函数式组件的挂载实际上也透露了有状态组件和函数式组件的实现原理&#xff0c;这都会包含…

dji esdk开发(4)SDK互联互通(与云端进行小数据通信)

Edge SDK 提供接口可以通过上云 API 与和机场建立连接的云端服务器进行小数据交互,即向云端服务器发送自定义小数据与接收来自云端服务器的自定义小数据。 注意: 使用该接口发送和接收数据上下行通道最大带宽不应超过 0.5Mb/S。 1、云端低速通道介绍 使用自定义小数据通道需…

【经验分享】如何快速转化笔记格式为标准的MarkDown格式并进行博客发布,提高生产力?

如何转化笔记模式并快速发布博客&#xff1f; 引入 不知道各位CSDN的小伙伴们有没有这样的苦恼&#xff0c;当我们想要将笔记转换为博客文章时,笔记的格式可能与标准Markdown格式不符,需要花费大量时间调整格式。为解决这一痛点,我生成了一段Prompt,放入AI工具自动转化格式后…

雪花算法介绍

文章目录 概述Snowflake算法结构雪花算法的优缺点解决唯一ID这个问题解决方法Snowflake算法生成ID的过程Java 实现示例 概述 Snowflake算法是Twitter开发的一种分布式唯一ID生成算法&#xff0c;用于解决在分布式系统中生成全局唯一ID的问题。该算法的核心思想是通过对64位的I…

【Java程序设计】【C00385】基于(JavaWeb)Springboot的员工信息管理系统(有论文)

基于&#xff08;JavaWeb&#xff09;Springboot的员工信息管理系统 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c…

Learn OpenGL 32 PBR光照

光照 在本章节中&#xff0c;我们把重点放在将之前讨论的理论转化为实际的渲染器&#xff0c;这个渲染器将使用直接的&#xff08;或解析的&#xff09;光源&#xff1a;比如点光源&#xff0c;定向灯或聚光灯。 我们先来看看上一个章提到的反射方程的最终版&#xff1a; 我们…

UI自动化测试用例管理平台搭建

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 用到的工具&#xff1a;python3 django2 mysql RabbitMQ celery selenium python3和selen…

Linux系统编程--信号

1、信号&#xff08;一&#xff09; 1.1、什么是中断 1.2、中断分类 1.3、信号 1.4、信号与中断 1.5、信号名称 1.6、进程对信号的三种响应 1.7、signal函数&#xff1a;注册信号 signal(SIGINT, handler);返回值是SIGINT所对应的处理程序 再调用一下signal(SIGINT, handler2…

QT数据类型和容器用法

Qt库提供了基于通用模板的容器类, 这些类可用于存储指定类型的数据项&#xff0c;Qt中这些容器类的设计比STL容器更轻&#xff0c;更安全且更易于使用。容器类也都是隐式共的&#xff0c;它们是可重入的&#xff0c;并且已针对速度/低内存消耗和最小的内联代码扩展进行了优化&a…