Skip to content

Latest commit

 

History

History

972.Equal-Rational-Numbers

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

972.Equal-Rational-Numbers

比较容易想到的方法是:将循环节重复多写几遍加在后面,再比较两个字符串,就可以判断两个无限循环小数是形式上否相等。但是需要处理两个特殊的例子:

  1. 当循环节全部为0时,本质是有限小数,上述方法会失效。比如1.0和1.00(00)比较时,后者因为循环节的缘故被拉长,但这样比较字符串的话,无法与前者画上等号。

  2. 当循环节全部为9时,本质也是有限小数。比如0.1和0.0(99),注意这两个数学意义上是相等的,但无法用字符串的比较来判断相等。

我们的策略是:如果两者都是有限小数(非循环),那么就分别用stod转化为浮点数进行比较。如果两者都是无限循环小数,那么就用重复循环节的方法,将字符串拓展至相等的长度再比较。特别注意,循环节只包含0或者9的话,本质是有限小数,这两种情况下我们都需要把S转化为浮点数来比较(即前者的策略)。

对于“循环节全部为0”的情况,直接忽略循环节,将循环节前面的部分当做有限小数转化为浮点数。

对于“循环节全部为9”的情况,我们考察小数点后、循环节前有几个数字。比如:如果有两个数字,那么循环节部分等效于0.01;如果有一个数字,那么循环节部分等效于0.1;如果有零个数字,那么循环节部分等效于1。所以我们把这部分等效的数,直接加上循环节前面所代表的数,就是最终该字符串的数值。

特别注意,比较两个浮点数,不要轻易使用if (x==y),而是考察它们的绝对值之差是否足够小。

Leetcode Link