166 Fraction to Recurring Decimal 分数到小数
Posted lina2014
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了166 Fraction to Recurring Decimal 分数到小数相关的知识,希望对你有一定的参考价值。
给定两个整数,分别表示分数的分子和分母,返回字符串格式的小数。
如果小数部分为循环小数,则将重复部分括在括号内。
例如,
给出 分子 = 1, 分母 = 2,返回 "0.5".
给出 分子 = 2, 分母 = 1,返回 "2".
给出 分子 = 2, 分母 = 3,返回 "0.(6)".
详见:https://leetcode.com/problems/fraction-to-recurring-decimal/description/
Java实现:
class Solution { public String fractionToDecimal(int numerator, int denominator) { if(numerator == 0){ return "0"; } if(denominator == 0){ return ""; } String res = ""; //判断结果是否为负数,加负号 if((numerator<0) ^ (denominator<0)){ res += "-"; } //保证分子分母都为正数,防止取绝对值溢出,先将int转换为long,再取绝对值 long num = numerator; long den = denominator; num = Math.abs(num); den = Math.abs(den); //得到结果的整数部分 long numInt = num/den; res += String.valueOf(numInt); //判断是否能整除,如果能,则直接返回结果 long number = (num%den)*10; if(number==0){ return res; } //结果的小数部分:使用map记录每次操作之后的余数和对应的下标,HashMap的<key, value>分别对应<当前余数, 对应结果的下标>,当出现重复值的时候,可以通过对应下标寻找到重复部分。 HashMap<Long, Integer> map = new HashMap<Long, Integer>(); res += "."; while(number!=0){ //判断map中是否出现过该余数,如果出现过则开始循环 if(map.containsKey(number)){ int beg = map.get(number); //循环体开始的位置 String part1 = res.substring(0, beg); String part2 = res.substring(beg, res.length()); res = part1 + "(" + part2 + ")"; return res; } //继续下除 map.put(number, res.length()); numInt = number / den; res += String.valueOf(numInt); number = (number%den) * 10; } return res; } }
详见:https://www.cnblogs.com/grandyang/p/4238577.html
以上是关于166 Fraction to Recurring Decimal 分数到小数的主要内容,如果未能解决你的问题,请参考以下文章
166. Fraction to Recurring Decimal
166. Fraction to Recurring Decimal
166. Fraction to Recurring Decimal
166. Fraction to Recurring Decimal