笔试结束后,写了写第二道题
没有进行测试,不知道大数情况下会不会出错
function loopFractional (a, b) {
var isExit = function (i) {
if(mods[i] != undefined) {
return true;
}
return false;
}
var ints = parseInt(a/b);
var j = 2;
var mods = {};
var flag = true;
if(ints != 0) {
var r = ints + '.';
}else {
var r = 0 + '.';
}
a = a%b;
var i = 0;
var s = '';
var loop = false;
while(j <= 10000 && flag) {
j++;
a = a * 10;
//如果a能整除b,那么存入余数,跳出循环。
if(a % b == 0) {
mods[a%b] = j;
s += a / b;
flag = false;
break;
}
//如果不能整除,检测a/b的余数是否已经存在,如果已经存在,那么跳出循环.
if(isExit(a % b)) {
i = mods[a % b];
loop = true;
flag = false;
break;
}
//如果不能整除,检测a/b的余数不存在,存入余数,继续循环
if(a % b != 0) {
mods[a % b] = j;
s += parseInt(a / b);
a = a % b;
a = a * 10;
}
}
var result = r + s;
console.log(i, j);
if(j <= 10000) {
var suffix = '(' + result.substr(i-1, j - i) + ')';
}
if(!loop) {
return result;
}
return result + suffix;
}