博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Fraction to Recurring Decimal 分数转循环小数
阅读量:6322 次
发布时间:2019-06-22

本文共 1819 字,大约阅读时间需要 6 分钟。

Given two integers representing the numerator and denominator of a fraction, return the fraction in string format.

If the fractional part is repeating, enclose the repeating part in parentheses.

For example,

  • Given numerator = 1, denominator = 2, return "0.5".
  • Given numerator = 2, denominator = 1, return "2".
  • Given numerator = 2, denominator = 3, return "0.(6)".

Credits:

Special thanks to  for adding this problem and creating all test cases.

这道题还是比较有意思的,开始还担心万一结果是无限不循环小数怎么办,百度之后才发现原来可以写成分数的都是有理数,而有理数要么是有限的,要么是无限循环小数,无限不循环的叫无理数,例如圆周率pi或自然数e等,小学数学没学好,汗!由于还存在正负情况,处理方式是按正数处理,符号最后在判断,那么我们需要把除数和被除数取绝对值,那么问题就来了:由于整型数INT的取值范围是-2147483648~2147483647,而对-2147483648取绝对值就会超出范围,所以我们需要先转为long long型再取绝对值。那么怎么样找循环呢,肯定是再得到一个数字后要看看之前有没有出现这个数。为了节省搜索时间,我们采用哈希表来存数每个小数位上的数字。还有一个小技巧,由于我们要算出小数每一位,采取的方法是每次把余数乘10,再除以除数,得到的商即为小数的下一位数字。等到新算出来的数字在之前出现过,则在循环开始出加左括号,结束处加右括号。代码如下:

class Solution {public:    string fractionToDecimal(int numerator, int denominator) {        int s1 = numerator >= 0 ? 1 : -1;        int s2 = denominator >= 0 ? 1 : -1;        long long num = abs( (long long)numerator );        long long den = abs( (long long)denominator );        long long out = num / den;        long long rem = num % den;        unordered_map
m; string res = to_string(out); if (s1 * s2 == -1 && (out > 0 || rem > 0)) res = "-" + res; if (rem == 0) return res; res += "."; string s = ""; int pos = 0; while (rem != 0) { if (m.find(rem) != m.end()) { s.insert(m[rem], "("); s += ")"; return res + s; } m[rem] = pos; s += to_string((rem * 10) / den); rem = (rem * 10) % den; ++pos; } return res + s; }};

本文转自博客园Grandyang的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
汇正进销存
查看>>
近期学习oracle 数据库总结
查看>>
php apc
查看>>
我的友情链接
查看>>
C#学习视频分享与开发技术QQ交流群
查看>>
bootstrap datetimepicker 时间控件的使用
查看>>
sudo 密码超时时间
查看>>
数学分析原理 定理 6.4
查看>>
数据结构(3)
查看>>
【西交ACM】100 A+B problem
查看>>
分布式系统的面试题14
查看>>
web标准的理解
查看>>
浅谈C中的指针和数组(一)
查看>>
你应该在开始API开发之前知道的事(下)(翻译)
查看>>
反射 -- 业务需求:执行某个类中全部的以test为开头的无参数无返回值的非静态方法。...
查看>>
C#关于值类型和引用类型的备忘
查看>>
JavaScript正则表达式详解
查看>>
用委托在listbox中异步显示信息,解决线程间操作无效,从不是创建控件的线程访问它...
查看>>
activity四种启动模式
查看>>
tomcat运行模式APR安装
查看>>