Данный отчёт сгенерирован 10.02.2023 18:21:31 UTC.
HTML версия (этот сайт) сгенерирован 10.02.2023 18:21:38 UTC.
Коммит: [bfeb65b9] add automatic zip creation 10.02.2023 18:21:31
HTML версия (этот сайт) сгенерирован 10.02.2023 18:21:38 UTC.
Коммит: [bfeb65b9] add automatic zip creation 10.02.2023 18:21:31
Задача: Раціональне число
10.02.2023 18:21:31
Описание: Оголосити функцію rational(), яка отримує два натуральні числа a і b (a < b)
і повертає рядок, що містить запис раціонального числа a/b у вигляді десяткового дробу, можливо періодичного.
Наприклад, rational (2, 5) => "0.4", rational (1, 6) => "0.1(6)".
10.02.2023 18:21:31
Решений: 29
10.02.2023 18:21:31
Раціональне число
10.02.2023 18:21:31
function getPeriodStart(quotients, remainders, quotient, remainder) {
let index = -1;
for (let i = 0; i < quotients.length; i++) {
if (quotients[i] !== quotient) continue;
if (remainders[i] !== remainder) continue;
index = i;
break;
}
return index;
}
function rational(a, b) {
let periodStart = -1;
let quotients = [];
let remainders = [];
while (a !== 0 && periodStart === -1) {
let quotient = Math.trunc(a / b);
if (quotient >= 1) a -= quotient * b; // 'a' acts as a remainder now
periodStart = getPeriodStart(quotients, remainders, quotient, a);
remainders.push(a);
quotients.push(quotient);
a *= 10;
}
if (periodStart !== -1) {
let max = Math.max(1, periodStart);
return `${quotients[0]}.${quotients.slice(1, max).join('')}(${quotients.slice(max, quotients.length - 1).join('')})`;
}
return `${quotients[0]}.${quotients.slice(1).join('')}`;
}
function rational(a, b) {
let div_res = a / b;
let subs = div_res.toString().split('.')[1];
for (let j = 0; j < subs.length - 1; j++) {
for (let i = j + 1; i < subs.length; i++) {
if (subs.slice(j, i) == subs.slice(i, i + i - j)) {
return (String(div_res | 0) + "." + subs.slice(0, j) + "(" + subs.slice(j, i) + ")");
}
}
}
return String(div_res);
}
function findRepeating(st) {
if(st.length == 1)
return st;
let s = "";
for(x of st) {
if(st.replace(s+x, "").includes(s+x)) {
s += x;
}
}
return s;
}
function rational(a, b) {
let r = (a / b).toString();
let rp = d = r.split(".")[1];
while(rp.length > 1 && findRepeating(rp) != rp && findRepeating(rp) != "") {
rp = findRepeating(rp);
}
if(rp && rp != d) {
d = d.slice(0, d.indexOf(rp));
d += `(${rp})`
r = r.split(".")[0]+"."+d;
}
return r;
}
function rational(a, b) {
let res = "";
let mp = new Map();
mp.clear();
let rem = a % b;
while (rem != 0 && !mp.has(rem)) {
mp.set(rem, res.length);
rem *= 10;
let res_part = Math.floor(rem / b);
res += res_part.toString();
rem = rem % b;
}
if (rem == 0) return (a / b).toString();
else return "0." + res.slice(0, res.indexOf(res.substr(mp.get(rem)))) + "(" + res.substr(mp.get(rem)) + ")";
}
function rational(a, b){
let str = String (a/b);
let res = [];
let p = "";
for (let i = 2; i if (res.includes(str[i])){
p = res.slice(res.indexOf(str[i])).join('');
if (str.includes(p, i)) break;
}
res.push(String (str[i]));
}
if (p == "") return String (a/b);
else return ("0."+res.slice(0, res.length - p.length).join('')+'('+p+')');
}
function rational(a, b) {
let res = Math.floor(a/b) + '.';
a %= b;
const dig = [];
const A = {};
let zero = false;
for (let i=0; !(a in A); i++) {
if (a == 0) zero = true;
A[a] = i;
a *= 10;
dig.push(Math.floor(a/b));
a %= b;
}
res += dig.slice(0, A[a]).join('');
if (!zero) res += '(' + dig.slice(A[a]).join('') + ')';
return res;
}
function rational(a, b){
let rem = (a/b).toString().split('.')[1];
for (let i = 0; i < rem.length - 1; i++){
for(let j = i + 1; j < rem.length; j++){
if (rem.slice(i, j) == rem.slice(j, j + j - i)){
let right = (a/b).toString().split('.')[0] + '.';
let left = rem.slice(0, i) + "(" + rem.slice(i, j) + ")";
return right + left;
}
}
}
return (a/b).toString();
}
function rational(a, b) {
let rationalNumber = a / b, period;
rationalNumber = rationalNumber.toString();
let arrayOfNumbers = rationalNumber.slice(rationalNumber.indexOf(".") + 1, rationalNumber.length - 1)
for(let i = 0; i < arrayOfNumbers.length; i++){
if(arrayOfNumbers.indexOf(arrayOfNumbers[i], i + 1) != -1){
period = arrayOfNumbers.slice(i, arrayOfNumbers.indexOf(arrayOfNumbers[i], i + 1))
if(period == arrayOfNumbers.slice(arrayOfNumbers.indexOf(arrayOfNumbers[i], i + 1), arrayOfNumbers.indexOf(arrayOfNumbers[i], i + 1) + period.length)){
rationalNumber = rationalNumber.slice(0, rationalNumber.indexOf(".") + 1) + arrayOfNumbers.slice(0, i) + '(' + period + ')';
break;
}
}
}
return rationalNumber;
}
function getPeriodStart(quotients, remainders, quotient, remainder) {
let index = -1;
for (let i = 0; i < quotients.length; i++) {
if (quotients[i] !== quotient) continue;
if (remainders[i] !== remainder) continue;
index = i;
break;
}
return index;
}
function rational(a, b) {
let periodStart = -1;
let quotients = [];
let remainders = [];
while (a !== 0 && periodStart === -1) {
let quotient = Math.trunc(a / b);
if (quotient >= 1) a -= quotient * b; // 'a' acts as a remainder now
periodStart = getPeriodStart(quotients, remainders, quotient, a);
remainders.push(a);
quotients.push(quotient);
a *= 10;
}
if (periodStart !== -1) {
let max = Math.max(1, periodStart);
return `${quotients[0]}.${quotients.slice(1, max).join('')}(${quotients.slice(max, quotients.length - 1).join('')})`;
}
return `${quotients[0]}.${quotients.slice(1).join('')}`;
}
function rational(a, b) {
let number = '' + (a / b);
let right = number.slice(2);
for (let i = 0; i < right.length - 1; i++) {
for (let j = i + 1; j < ((right.length / 2) | 0); j++) {
if (right.slice(i, j) == right.slice(j, j + j - i)) {
return `${'' + (number | 0)}.${right.slice(0, i)}(${right.slice(i, j)})`;
}
}
}
return number;
}
function rational(a, b) {
let result = '0.';
let k = 0;
let len = 9;
while (a !== 0 && k < len) {
for (let p = 1; p <= 6; ++p) {
let num = a * Math.pow(10, p);
let ostatoc = Math.trunc(num / b).toString().padStart(p, '0')
if (a === num % b) {
return `${result}(${ostatoc})`;
}
}
k++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
function getPeriodStart(quotients, remainders, quotient, remainder) {
let index = -1;
for (let i = 0; i < quotients.length; i++) {
if (quotients[i] !== quotient) continue;
if (remainders[i] !== remainder) continue;
index = i;
break;
}
return index;
}
function rational(a, b) {
let periodStart = -1;
let quotients = [];
let remainders = [];
while (a !== 0 && periodStart === -1) {
let quotient = Math.trunc(a / b);
if (quotient >= 1) a -= quotient * b; // 'a' acts as a remainder now
periodStart = getPeriodStart(quotients, remainders, quotient, a);
remainders.push(a);
quotients.push(quotient);
a *= 10;
}
if (periodStart !== -1) {
let max = Math.max(1, periodStart);
return `${quotients[0]}.${quotients.slice(1, max).join('')}(${quotients.slice(max, quotients.length - 1).join('')})`;
}
return `${quotients[0]}.${quotients.slice(1).join('')}`;
}
function rational(a, b) {
let result = '0.';
let k = 0;
const len = 10;
while (a !== 0 && k < len) {
for (let i = 1; i < 10; i++) {
const num = a * Math.pow(10, i);
const rest = Math.trunc(num / b).toString().padStart(i, '0')
if (a === num % b) {
return result + '(' + rest + ')';
}
}
k++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
function rational (a, b) {
let result = '0.';
let c = 0;
let length = 9;
while (a !== 0 && c < length) {
for (let i = 1; i <= 6; i++) {
let num = a * Math.pow(10, i);
let ostatoc = Math.trunc(num / b).toString().padStart(i,'0')
if (a === num % b) {
return `${result}(${ostatoc})`;
}
}
c++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
function rational(a, b)
{
let result = "";
if (a < b)
{
result = "0.";
}
else
{
result += Math.trunc(a / b);
a = a % b;
if (a > 0)
{
result += ".";
}
}
let k = 0;
const len = 14;
while (a !== 0 && k < len)
{
for (let p = 1; p < 7; ++p)
{
const num = a * Math.pow(10, p);
const ostatoc = Math.trunc(num / b).toString().padStart(p, '0')
if (a === num % b)
{
return `${result}(${ostatoc})`;
}
}
k++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
function getPeriodStart(quotients, remainders, quotient, remainder) {
let index = -1;
for (let i = 0; i < quotients.length; i++) {
if (quotients[i] !== quotient) continue;
if (remainders[i] !== remainder) continue;
index = i;
break;
}
return index;
}
function rational(a, b) {
let periodStart = -1;
let quotients = [];
let remainders = [];
while (a !== 0 && periodStart === -1) {
let quotient = Math.trunc(a / b);
if (quotient >= 1) a -= quotient * b; // 'a' acts as a remainder now
periodStart = getPeriodStart(quotients, remainders, quotient, a);
remainders.push(a);
quotients.push(quotient);
a *= 10;
}
if (periodStart !== -1) {
let max = Math.max(1, periodStart);
return `${quotients[0]}.${quotients.slice(1, max).join('')}(${quotients.slice(max, quotients.length - 1).join('')})`;
}
return `${quotients[0]}.${quotients.slice(1).join('')}`;
}
function rational(a, b)
{
let num = a/b, period
num = num.toString()
let arr = num.slice(num.indexOf('.') + 1, num.length-1)
for(let i=0; i< arr.length; i++)
{
if(arr.indexOf(arr[i], i + 1) !=-1)
{
period = arr.slice(i, arr.indexOf(arr[i], i+1))
if(period == arr.slice(arr.indexOf(arr[i], i+1), arr.indexOf(arr[i], i+1) + period.length))
{
num = num.slice(0, num.indexOf('.') + 1) + arr.slice(0, i) + '('+period+')'
break
}
}
}
return num
}
function rational2(c, d, e, j) {
let index = -1;
for (let i = 0; i < c.length; i++) {
if (c[i] !== e) {
continue;
}
if (d[i] !== j) {
continue;
}
index = i;
break;
}
return index;
}
function rational(a, b) {
let flag = -1;
let c = [];
let d = [];
while (a !== 0 && flag === -1) {
let e = Math.trunc(a / b);
if (e >= 1) a -= e * b; // 'a' acts as a j now
flag = rational2(c, d, e, a);
d.push(a);
c.push(e);
a *= 10;
}
if (flag !== -1) {
let max = Math.max(1, flag);
return `${c[0]}.${c.slice(1, max).join('')}(${c.slice(max, c.length - 1).join('')})`;
}
return `${c[0]}.${c.slice(1).join('')}`;
}
function rational(a, b) {
let result = '';
if (a < b) {
result = '0.';
} else {
result += Math.trunc(a / b);
a = a % b;
if (a > 0) result += '.';
}
let c = 0;
const len = 20;
while (a !== 0 && c < len) {
for (let p = 1; p < 10; ++p) {
const num = a * Math.pow(10, p);
const residue = Math.trunc(num / b).toString().padStart(p, '0')
if (a === num % b) {
return `${result}(${residue})`;
}
}
c++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
function rational(a, b){
let str = ''
let arr = []
while (a){
a *= 10
if (arr.includes(a)){
str = str.split('')
str.splice(arr.indexOf(a), 0, '(')
str = str.join('') + ')'
break
}
arr.push(a)
str = str + Math.floor(a/b)
a -= b * Math.floor(a/b)
}
return '0.' + str
}
function rational(a, b) {
let result = '0.';
let k = 0;
const len = 9;
while (a !== 0 && k < len) {
for (let p = 1; p <= 6; ++p) {
const num = a * Math.pow(10, p);
const ostatoc = Math.trunc(num / b).toString().padStart(p, '0')
if (a === num % b) {
return `${result}(${ostatoc})`;
}
}
k++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
function rational(a, b)
{
let q = a/b;
let arr = [];
let output = '0.';
for(;;)
{
q*=10;
if(arr.indexOf(Math.floor(q,1)),arr.indexOf(Math.floor(q,1))!=-1) break;
arr.push(Math.floor(q,1))
q = q-Math.floor(q,1);
}
let t = ''
if(arr[arr.length-1]==arr[arr.length-2]) arr.pop();
for(let i =0;i< arr.indexOf(Math.floor(q,1));i++)
{
output+=arr[i];
}
t +='(';
for(let i = arr.indexOf(Math.floor(q,1));i< arr.length;i++)
{
t+=arr[i];
}
t +=')';
if(t=='(0)') return output;
return output+t;
}
function rational(a, b) {
let result = '0.';
let k = 0;
let len = 9;
while (a !== 0 && k < len) {
for (let p = 1; p <= 6; ++p) {
let num = a * Math.pow(10, p);
let ostatoc = Math.trunc(num / b).toString().padStart(p, '0')
if (a === num % b) {
return `${result}(${ostatoc})`;
}
}
k++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
function rational(a, b) {
let remainder = a % b;
let quotient = (a - remainder) / b;
let decimal = quotient + ".";
let remainders = [remainder];
while (remainder !== 0) {
remainder *= 10;
quotient = (remainder - (remainder % b)) / b;
remainder = remainder % b;
decimal += quotient;
// check for repeating decimals
if (remainders.includes(remainder)) {
let repeatStart = remainders.indexOf(remainder);
let repeat = decimal.slice(repeatStart + 2);
return decimal.slice(0, repeatStart + 2) + "(" + repeat + ")";
} else {
remainders.push(remainder);
}
}
return decimal;
}
function rational(a, b) {
let res = "";
let mp = new Map();
mp.clear();
let rem = a % b;
while (rem != 0 && !mp.has(rem)) {
mp.set(rem, res.length);
rem *= 10;
let res_part = Math.floor(rem / b);
res += res_part.toString();
rem = rem % b;
}
if (rem == 0) return (a / b).toString();
else return "0." + res.slice(0, res.indexOf(res.substr(mp.get(rem)))) + "(" + res.substr(mp.get(rem)) + ")";
}
function rational(a, b) {
let div = a / b;
let part = div.toString().split('.')[1];
for (let j = 0; j < part.length - 1; j++) {
for (let i = j + 1; i < part.length; i++) {
if (part.slice(j, i) == part.slice(i, i + i - j)) {
return (String(div | 0) + "." + part.slice(0, j) + "(" + part.slice(j, i) + ")");
}
}
}
return String(div);
}
function rational (a, b) {
let res = '0.';
let c = 0;
let length = 9;
while (a !== 0 && c < length) {
for (let i = 1; i <= 6; i++) {
let num = a * Math.pow(10, i);
let ostatoc = Math.trunc(num / b).toString().padStart(i,'0')
if (a === num % b) {
return `${res}(${ostatoc})`;
}
}
c++;
a *= 10;
res += Math.trunc(a / b);
a = a % b;
}
return res;
}
function rational(a, b) {
let result = '0.';
let k = 0;
const len = 10;
while (a !== 0 && k < len) {
for (let i = 1; i < 10; i++) {
const num = a * Math.pow(10, i);
const rest = Math.trunc(num / b).toString().padStart(i, '0')
if (a === num % b) {
return result + '(' + rest + ')';
}
}
k++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
function rational(numerator, denominator){
const result = [0, '.'];
addDecimal(numerator, denominator, result);
return result.join('');
};
function addDecimal(numerator, denominator, result) {
let idx = 0;
const carries = {};
while (numerator !== 0 && !(numerator in carries)) {
carries[numerator] = idx++;
numerator *= 10;
const nextDigit = Math.floor(numerator / denominator);
result.push(nextDigit.toString());
numerator %= denominator;
}
if (numerator in carries) {
addParens(carries[numerator], result);
}
}
function addParens(decimalIdx, result) {
result.splice(2 + decimalIdx, 0, '(');
result.push(')');
}
let index = -1;
for (let i = 0; i < quotients.length; i++) {
if (quotients[i] !== quotient) continue;
if (remainders[i] !== remainder) continue;
index = i;
break;
}
return index;
}
function rational(a, b) {
let periodStart = -1;
let quotients = [];
let remainders = [];
while (a !== 0 && periodStart === -1) {
let quotient = Math.trunc(a / b);
if (quotient >= 1) a -= quotient * b; // 'a' acts as a remainder now
periodStart = getPeriodStart(quotients, remainders, quotient, a);
remainders.push(a);
quotients.push(quotient);
a *= 10;
}
if (periodStart !== -1) {
let max = Math.max(1, periodStart);
return `${quotients[0]}.${quotients.slice(1, max).join('')}(${quotients.slice(max, quotients.length - 1).join('')})`;
}
return `${quotients[0]}.${quotients.slice(1).join('')}`;
}
let div_res = a / b;
let subs = div_res.toString().split('.')[1];
for (let j = 0; j < subs.length - 1; j++) {
for (let i = j + 1; i < subs.length; i++) {
if (subs.slice(j, i) == subs.slice(i, i + i - j)) {
return (String(div_res | 0) + "." + subs.slice(0, j) + "(" + subs.slice(j, i) + ")");
}
}
}
return String(div_res);
}
if(st.length == 1)
return st;
let s = "";
for(x of st) {
if(st.replace(s+x, "").includes(s+x)) {
s += x;
}
}
return s;
}
function rational(a, b) {
let r = (a / b).toString();
let rp = d = r.split(".")[1];
while(rp.length > 1 && findRepeating(rp) != rp && findRepeating(rp) != "") {
rp = findRepeating(rp);
}
if(rp && rp != d) {
d = d.slice(0, d.indexOf(rp));
d += `(${rp})`
r = r.split(".")[0]+"."+d;
}
return r;
}
let res = "";
let mp = new Map();
mp.clear();
let rem = a % b;
while (rem != 0 && !mp.has(rem)) {
mp.set(rem, res.length);
rem *= 10;
let res_part = Math.floor(rem / b);
res += res_part.toString();
rem = rem % b;
}
if (rem == 0) return (a / b).toString();
else return "0." + res.slice(0, res.indexOf(res.substr(mp.get(rem)))) + "(" + res.substr(mp.get(rem)) + ")";
}
let str = String (a/b);
let res = [];
let p = "";
for (let i = 2; i
p = res.slice(res.indexOf(str[i])).join('');
if (str.includes(p, i)) break;
}
res.push(String (str[i]));
}
if (p == "") return String (a/b);
else return ("0."+res.slice(0, res.length - p.length).join('')+'('+p+')');
}
let res = Math.floor(a/b) + '.';
a %= b;
const dig = [];
const A = {};
let zero = false;
for (let i=0; !(a in A); i++) {
if (a == 0) zero = true;
A[a] = i;
a *= 10;
dig.push(Math.floor(a/b));
a %= b;
}
res += dig.slice(0, A[a]).join('');
if (!zero) res += '(' + dig.slice(A[a]).join('') + ')';
return res;
}
let rem = (a/b).toString().split('.')[1];
for (let i = 0; i < rem.length - 1; i++){
for(let j = i + 1; j < rem.length; j++){
if (rem.slice(i, j) == rem.slice(j, j + j - i)){
let right = (a/b).toString().split('.')[0] + '.';
let left = rem.slice(0, i) + "(" + rem.slice(i, j) + ")";
return right + left;
}
}
}
return (a/b).toString();
}
let rationalNumber = a / b, period;
rationalNumber = rationalNumber.toString();
let arrayOfNumbers = rationalNumber.slice(rationalNumber.indexOf(".") + 1, rationalNumber.length - 1)
for(let i = 0; i < arrayOfNumbers.length; i++){
if(arrayOfNumbers.indexOf(arrayOfNumbers[i], i + 1) != -1){
period = arrayOfNumbers.slice(i, arrayOfNumbers.indexOf(arrayOfNumbers[i], i + 1))
if(period == arrayOfNumbers.slice(arrayOfNumbers.indexOf(arrayOfNumbers[i], i + 1), arrayOfNumbers.indexOf(arrayOfNumbers[i], i + 1) + period.length)){
rationalNumber = rationalNumber.slice(0, rationalNumber.indexOf(".") + 1) + arrayOfNumbers.slice(0, i) + '(' + period + ')';
break;
}
}
}
return rationalNumber;
}
let index = -1;
for (let i = 0; i < quotients.length; i++) {
if (quotients[i] !== quotient) continue;
if (remainders[i] !== remainder) continue;
index = i;
break;
}
return index;
}
function rational(a, b) {
let periodStart = -1;
let quotients = [];
let remainders = [];
while (a !== 0 && periodStart === -1) {
let quotient = Math.trunc(a / b);
if (quotient >= 1) a -= quotient * b; // 'a' acts as a remainder now
periodStart = getPeriodStart(quotients, remainders, quotient, a);
remainders.push(a);
quotients.push(quotient);
a *= 10;
}
if (periodStart !== -1) {
let max = Math.max(1, periodStart);
return `${quotients[0]}.${quotients.slice(1, max).join('')}(${quotients.slice(max, quotients.length - 1).join('')})`;
}
return `${quotients[0]}.${quotients.slice(1).join('')}`;
}
let number = '' + (a / b);
let right = number.slice(2);
for (let i = 0; i < right.length - 1; i++) {
for (let j = i + 1; j < ((right.length / 2) | 0); j++) {
if (right.slice(i, j) == right.slice(j, j + j - i)) {
return `${'' + (number | 0)}.${right.slice(0, i)}(${right.slice(i, j)})`;
}
}
}
return number;
}
let result = '0.';
let k = 0;
let len = 9;
while (a !== 0 && k < len) {
for (let p = 1; p <= 6; ++p) {
let num = a * Math.pow(10, p);
let ostatoc = Math.trunc(num / b).toString().padStart(p, '0')
if (a === num % b) {
return `${result}(${ostatoc})`;
}
}
k++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
let index = -1;
for (let i = 0; i < quotients.length; i++) {
if (quotients[i] !== quotient) continue;
if (remainders[i] !== remainder) continue;
index = i;
break;
}
return index;
}
function rational(a, b) {
let periodStart = -1;
let quotients = [];
let remainders = [];
while (a !== 0 && periodStart === -1) {
let quotient = Math.trunc(a / b);
if (quotient >= 1) a -= quotient * b; // 'a' acts as a remainder now
periodStart = getPeriodStart(quotients, remainders, quotient, a);
remainders.push(a);
quotients.push(quotient);
a *= 10;
}
if (periodStart !== -1) {
let max = Math.max(1, periodStart);
return `${quotients[0]}.${quotients.slice(1, max).join('')}(${quotients.slice(max, quotients.length - 1).join('')})`;
}
return `${quotients[0]}.${quotients.slice(1).join('')}`;
}
let result = '0.';
let k = 0;
const len = 10;
while (a !== 0 && k < len) {
for (let i = 1; i < 10; i++) {
const num = a * Math.pow(10, i);
const rest = Math.trunc(num / b).toString().padStart(i, '0')
if (a === num % b) {
return result + '(' + rest + ')';
}
}
k++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
let result = '0.';
let c = 0;
let length = 9;
while (a !== 0 && c < length) {
for (let i = 1; i <= 6; i++) {
let num = a * Math.pow(10, i);
let ostatoc = Math.trunc(num / b).toString().padStart(i,'0')
if (a === num % b) {
return `${result}(${ostatoc})`;
}
}
c++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
{
let result = "";
if (a < b)
{
result = "0.";
}
else
{
result += Math.trunc(a / b);
a = a % b;
if (a > 0)
{
result += ".";
}
}
let k = 0;
const len = 14;
while (a !== 0 && k < len)
{
for (let p = 1; p < 7; ++p)
{
const num = a * Math.pow(10, p);
const ostatoc = Math.trunc(num / b).toString().padStart(p, '0')
if (a === num % b)
{
return `${result}(${ostatoc})`;
}
}
k++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
let index = -1;
for (let i = 0; i < quotients.length; i++) {
if (quotients[i] !== quotient) continue;
if (remainders[i] !== remainder) continue;
index = i;
break;
}
return index;
}
function rational(a, b) {
let periodStart = -1;
let quotients = [];
let remainders = [];
while (a !== 0 && periodStart === -1) {
let quotient = Math.trunc(a / b);
if (quotient >= 1) a -= quotient * b; // 'a' acts as a remainder now
periodStart = getPeriodStart(quotients, remainders, quotient, a);
remainders.push(a);
quotients.push(quotient);
a *= 10;
}
if (periodStart !== -1) {
let max = Math.max(1, periodStart);
return `${quotients[0]}.${quotients.slice(1, max).join('')}(${quotients.slice(max, quotients.length - 1).join('')})`;
}
return `${quotients[0]}.${quotients.slice(1).join('')}`;
}
{
let num = a/b, period
num = num.toString()
let arr = num.slice(num.indexOf('.') + 1, num.length-1)
for(let i=0; i< arr.length; i++)
{
if(arr.indexOf(arr[i], i + 1) !=-1)
{
period = arr.slice(i, arr.indexOf(arr[i], i+1))
if(period == arr.slice(arr.indexOf(arr[i], i+1), arr.indexOf(arr[i], i+1) + period.length))
{
num = num.slice(0, num.indexOf('.') + 1) + arr.slice(0, i) + '('+period+')'
break
}
}
}
return num
}
let index = -1;
for (let i = 0; i < c.length; i++) {
if (c[i] !== e) {
continue;
}
if (d[i] !== j) {
continue;
}
index = i;
break;
}
return index;
}
function rational(a, b) {
let flag = -1;
let c = [];
let d = [];
while (a !== 0 && flag === -1) {
let e = Math.trunc(a / b);
if (e >= 1) a -= e * b; // 'a' acts as a j now
flag = rational2(c, d, e, a);
d.push(a);
c.push(e);
a *= 10;
}
if (flag !== -1) {
let max = Math.max(1, flag);
return `${c[0]}.${c.slice(1, max).join('')}(${c.slice(max, c.length - 1).join('')})`;
}
return `${c[0]}.${c.slice(1).join('')}`;
}
let result = '';
if (a < b) {
result = '0.';
} else {
result += Math.trunc(a / b);
a = a % b;
if (a > 0) result += '.';
}
let c = 0;
const len = 20;
while (a !== 0 && c < len) {
for (let p = 1; p < 10; ++p) {
const num = a * Math.pow(10, p);
const residue = Math.trunc(num / b).toString().padStart(p, '0')
if (a === num % b) {
return `${result}(${residue})`;
}
}
c++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
let str = ''
let arr = []
while (a){
a *= 10
if (arr.includes(a)){
str = str.split('')
str.splice(arr.indexOf(a), 0, '(')
str = str.join('') + ')'
break
}
arr.push(a)
str = str + Math.floor(a/b)
a -= b * Math.floor(a/b)
}
return '0.' + str
}
let result = '0.';
let k = 0;
const len = 9;
while (a !== 0 && k < len) {
for (let p = 1; p <= 6; ++p) {
const num = a * Math.pow(10, p);
const ostatoc = Math.trunc(num / b).toString().padStart(p, '0')
if (a === num % b) {
return `${result}(${ostatoc})`;
}
}
k++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
{
let q = a/b;
let arr = [];
let output = '0.';
for(;;)
{
q*=10;
if(arr.indexOf(Math.floor(q,1)),arr.indexOf(Math.floor(q,1))!=-1) break;
arr.push(Math.floor(q,1))
q = q-Math.floor(q,1);
}
let t = ''
if(arr[arr.length-1]==arr[arr.length-2]) arr.pop();
for(let i =0;i< arr.indexOf(Math.floor(q,1));i++)
{
output+=arr[i];
}
t +='(';
for(let i = arr.indexOf(Math.floor(q,1));i< arr.length;i++)
{
t+=arr[i];
}
t +=')';
if(t=='(0)') return output;
return output+t;
}
let result = '0.';
let k = 0;
let len = 9;
while (a !== 0 && k < len) {
for (let p = 1; p <= 6; ++p) {
let num = a * Math.pow(10, p);
let ostatoc = Math.trunc(num / b).toString().padStart(p, '0')
if (a === num % b) {
return `${result}(${ostatoc})`;
}
}
k++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
let remainder = a % b;
let quotient = (a - remainder) / b;
let decimal = quotient + ".";
let remainders = [remainder];
while (remainder !== 0) {
remainder *= 10;
quotient = (remainder - (remainder % b)) / b;
remainder = remainder % b;
decimal += quotient;
// check for repeating decimals
if (remainders.includes(remainder)) {
let repeatStart = remainders.indexOf(remainder);
let repeat = decimal.slice(repeatStart + 2);
return decimal.slice(0, repeatStart + 2) + "(" + repeat + ")";
} else {
remainders.push(remainder);
}
}
return decimal;
}
let res = "";
let mp = new Map();
mp.clear();
let rem = a % b;
while (rem != 0 && !mp.has(rem)) {
mp.set(rem, res.length);
rem *= 10;
let res_part = Math.floor(rem / b);
res += res_part.toString();
rem = rem % b;
}
if (rem == 0) return (a / b).toString();
else return "0." + res.slice(0, res.indexOf(res.substr(mp.get(rem)))) + "(" + res.substr(mp.get(rem)) + ")";
}
let div = a / b;
let part = div.toString().split('.')[1];
for (let j = 0; j < part.length - 1; j++) {
for (let i = j + 1; i < part.length; i++) {
if (part.slice(j, i) == part.slice(i, i + i - j)) {
return (String(div | 0) + "." + part.slice(0, j) + "(" + part.slice(j, i) + ")");
}
}
}
return String(div);
}
let res = '0.';
let c = 0;
let length = 9;
while (a !== 0 && c < length) {
for (let i = 1; i <= 6; i++) {
let num = a * Math.pow(10, i);
let ostatoc = Math.trunc(num / b).toString().padStart(i,'0')
if (a === num % b) {
return `${res}(${ostatoc})`;
}
}
c++;
a *= 10;
res += Math.trunc(a / b);
a = a % b;
}
return res;
}
let result = '0.';
let k = 0;
const len = 10;
while (a !== 0 && k < len) {
for (let i = 1; i < 10; i++) {
const num = a * Math.pow(10, i);
const rest = Math.trunc(num / b).toString().padStart(i, '0')
if (a === num % b) {
return result + '(' + rest + ')';
}
}
k++;
a *= 10;
result += Math.trunc(a / b);
a = a % b;
}
return result;
}
const result = [0, '.'];
addDecimal(numerator, denominator, result);
return result.join('');
};
function addDecimal(numerator, denominator, result) {
let idx = 0;
const carries = {};
while (numerator !== 0 && !(numerator in carries)) {
carries[numerator] = idx++;
numerator *= 10;
const nextDigit = Math.floor(numerator / denominator);
result.push(nextDigit.toString());
numerator %= denominator;
}
if (numerator in carries) {
addParens(carries[numerator], result);
}
}
function addParens(decimalIdx, result) {
result.splice(2 + decimalIdx, 0, '(');
result.push(')');
}