题目:
难度:Middle
相关话题:哈希表
、数学
给定两个整数,分别表示分数的分子numerator 和分母 denominator,以字符串形式返回小数。
如果小数部分为循环小数,则将循环的部分括在括号内。
示例 1:
输入: numerator = 1, denominator = 2
输出: "0.5"
示例2:
输入: numerator = 2, denominator = 1
输出: "2"
示例3:
输入: numerator = 2, denominator = 3
输出:"0.(6)"
/**
* @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
* @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
* @param {number} numerator
* @param {number} denominator
* @return {string}
*/
var fractionToDecimal = function(numerator, denominator) {
if(numerator===0)return "0"
let neg=0,res=''
// 确定正负号
if(numerator<0){neg=neg^1; numerator=-numerator}
if(denominator<0){neg=neg^1; denominator=-denominator}
if(neg===1)res='-'+res
// 确定整数部分
let int=Math.floor(numerator/denominator)
let mod=numerator%denominator
res+=int
if(mod===0)return res
res+="."
// 确定小数部分
let modHash={}
modHash[mod]=res.length
while(mod!==0){
mod*=10
res+=Math.floor(mod/denominator)
mod %= denominator
if(modHash[mod]!=null){
let idx=modHash[mod]
res=res.substring(0,idx)+"("+res.substring(idx)+")"
break
}
modHash[mod]=res.length
}
return res
};