【LeetCode】008 Fraction to Recurring Decimal 六点六六六循环
2016-03-04 11:39
501 查看
【题目】
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)".
给定分子分母,返回其小数形式,若为无限循环小数,则用括号标出循环部分。
点击打开链接
【解析】
设res为最终输出字符串。m[r]为res中每一位数字所在单元的标号。每次做除法得到的余数r即为res在该位置上的数字,查找r是否在m集合中,若不在其中则继续进行除法运算,若在其中则说明进入循环,从m[r]中提取位数,将res中之前的字符保留,将res中m[r]以后的字符放入括号内,最后整个字符串赋值给res更新。
【程序】
python版本
res[:n]表示截取res字符串中,res
以前所有字符;res[n:]表示截取res字符串中,res
以后所有字符(包括res
)。
【关于bug】
在Python中,‘/’表示正常除法,‘//’表示整除,区别于c语言。若使用正常除法,在res字符串内会出现浮点数,造成结果出错。
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)".
给定分子分母,返回其小数形式,若为无限循环小数,则用括号标出循环部分。
点击打开链接
【解析】
设res为最终输出字符串。m[r]为res中每一位数字所在单元的标号。每次做除法得到的余数r即为res在该位置上的数字,查找r是否在m集合中,若不在其中则继续进行除法运算,若在其中则说明进入循环,从m[r]中提取位数,将res中之前的字符保留,将res中m[r]以后的字符放入括号内,最后整个字符串赋值给res更新。
【程序】
python版本
class Solution(object): def fractionToDecimal(self, numerator, demoinator): res = '' if numerator == 0: return str(0) elif (numerator < 0) ^ (demoinator < 0): res += '-' n = abs(numerator) d = abs(demoinator) res += str(n//d) if n % d == 0: return res res += '.' r = n % d m = {} while r: if r in m: res = res[:m[r]] + '('+res[m[r]:]+')' break m[r] = len(res) r *= 10 res += str(r//d) r %= d return res
res[:n]表示截取res字符串中,res
以前所有字符;res[n:]表示截取res字符串中,res
以后所有字符(包括res
)。
【关于bug】
在Python中,‘/’表示正常除法,‘//’表示整除,区别于c语言。若使用正常除法,在res字符串内会出现浮点数,造成结果出错。
相关文章推荐
- hd 1070 Milk
- Android binder (2): Parcel
- Android binder (3): Binder 驱动的初始化
- 静态页面中如何传json数据
- macbook 放flash发烫,转html5
- oracle--游标
- Linux系统中操作文件数过多导致的错误解决方法
- Mysql数据库导入Sqlite
- 带参宏定义的一个易错题
- windows 安装 zookeeper 并测试
- 23.1 Windows 套接字
- 类型判断
- Android binder (1): 智能指针
- 四次元新浪微博客户端Android源码
- linux下的二进制文件的编辑和查看
- 控制器间的传值(顺传&回传),代理方法
- 私服nexus搭建
- 2016-3-4 linux虚拟机网络
- 怎样重配 重置mysql主从同步
- 偶然发现的CSDN编辑器下的一个不方便用户编写代码的bug