输入用例:0.25或2.00或0.25(285714)
输入用例要求:整数不省略小数部分,如2.00,无限循环小数中()表示循环体
输出用例:1/4或2或177/700
难点在于如何表示循环体
思路:
// 用最小分数表示小数
function func(str){
var reg2=/^\d+\.\d+(\(\d+\)){0,1}$/
var reg1=/^\d+\.\d+$/
if(reg2.test(str)){
if(reg1.test(str)){
//有限小数
var mid=str.split('.')
var zh=mid[0]
var xs=mid[1]
var len=xs.length
var fenmu=Math.pow(10,len)
var fenzi=parseFloat(str)*fenmu
var zhi=findMax(fenzi,fenmu)
var fenmu=fenmu/zhi
var fenzi=fenzi/zhi
console.log('有限小数')
if(fenmu==1){
console.log(fenzi)
}
else{
console.log(fenzi+'/'+fenmu)
}
}
else{
//无限循环小数
var mid=str.split('.')
var zh=mid[0]
var ne=mid[1].split(/[\(\)]/)
var xs=ne[0]
var xh=ne[1]
var left=parseFloat(zh+'.'+xs)
var lenxs=xs.length
var leftfenmu=Math.pow(10,lenxs)
var leftfenzi=left*leftfenmu
var lenxh=xh.length
var ch=parseInt(new Array(lenxh).fill(9).join(''))
var rightfenmu=parseInt((new Array(lenxh).fill(9)).concat(new Array(lenxs).fill(0)).join(''))
var rightfenzi=parseInt(xh)
var fenzi=ch*leftfenzi+rightfenzi
var fenmu=rightfenmu
var zhi=findMax(fenzi,fenmu)
var fenzi=fenzi/zhi
var fenmu=fenmu/zhi
console.log(fenzi+'/'+fenmu)
}
}
else{
console.log('Invalid Number')
}
}
function findMax(a,b){
var minzhi=Math.min(a,b)
var res=1
for(var i=minzhi;i>0;i--){
if(a%i==0&&b%i==0){
res=i
break
}
}
return res
}
func('0.25(285714)') //调用函数