Fraction to Recurring Decimal
来源:互联网 发布:vb matlab 速度 编辑:程序博客网 时间:2024/05/22 03:17
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 @Shangrila for adding this problem and creating all test cases.
思路:这题跟divide two integer是不一样的。divide two integer要求的返回的是int值。所以那题-128/-1 位移计算后,还是-128. (bit表达式是一样的)。但是题目要求是返回127.所以只能将-128转换成127再进行计算。
这题是要求返回的string,所以-128/-1返回的是128. 不关心Integer的范围。
转换成long是为了Math.abs的时候,不溢出,因为-128~127. Math.abs(-128)会变成128,但是int范围是127.所以会溢出。转换成long这样Math.abs会防止溢出。
divide two integer用long是为了防止移位溢出。
注意这两个题目的区别。divide two integer是要求返回的int,有范围要求,这个题目没有,只要求返回结果的string。不需要转换成int范围内的值。
这个题目的核心思想就是:模仿除法的过程,然后用hashmap存储numerator的值,如果出现了相同的numerator那么就出现了cycle,
利用stringbuilder来append string,hashmap里面 key是numerator,value是stringbuilder.length,这样出现了cycle,知道如何去插入"(",再append")".
public class Solution { public String fractionToDecimal(int numerator, int denominator) { long numeratorl = (long) numerator; long denominatorl = (long) denominator; StringBuilder sb = new StringBuilder(); if((numerator>0 && denominator<0) ||(numerator<0 && denominator>0)){ sb.append("-"); } numeratorl = Math.abs(numeratorl); denominatorl = Math.abs(denominatorl); //handle int part; long res = numeratorl/denominatorl; numeratorl = (numeratorl%denominatorl)*10; sb.append(res); if(numeratorl!=0){ sb.append("."); } //handle float part; HashMap<Long,Integer> hashmap = new HashMap<Long,Integer>(); while(numeratorl!=0){ if(hashmap.containsKey(numeratorl)){ int index = hashmap.get(numeratorl); sb.insert(index,"("); sb.append(")"); break; }else{ res = numeratorl/denominatorl; hashmap.put(numeratorl,sb.length()); numeratorl = (numeratorl%denominatorl)*10; sb.append(res); } } return sb.toString(); } }
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to recurring decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- Fraction to Recurring Decimal
- 详解keepalived配置和使用
- 查询占CPU高的oracle进程执行的SQL语句或JOB
- Keepalived构建双主MySQL
- No real data, no any impact, no systematic test Post-doc
- keepalived.conf配置详解
- Fraction to Recurring Decimal
- Eclipse搭建Ruby集成开发环境
- 【POJ 3207】Ikki's Story IV - Panda's Trick
- LeetCode刷提笔录Scramble String
- JS中的prototype
- 《Qt Quick核心编程》勘误
- 关于2003Server下IIS运行.net程序IE无法访问出现403.1错误的解决过程
- 【BZOJ】【P1964】【hull 三维凸包】【题解】【计算几何】
- Node.js的模块载入方式与机制