Search

N-Parasitic Numbers Ending in N

날짜
2022/02/19
속성
코드워즈

Parasitic Number(기생수)란?

기생수를 찾는 공식

Solution

기생수 자체와 공식을 이해하는 데만 시간이 꽤 걸렸다. 일단은 10진법만 구현하면 다음과 같다. 자바스크립트에서 나누기 연산을 하면 대략 20자리부터는 잘리고, 곱하기 연산으로 정수부를 구하려고 하면 exponential 표기법으로 나오므로 반복되는 구간을 제대로 구하기 어렵다. 따라서 직접 나누기를 구현해주어야 한다. 8, 16진법은 어케 하냥... ㅠ 내일 더 풀어야지
// n = 분자, dn = 분모 function bigDivide(n, dn) { let curr=n, decimalStr='', period=0, remainder; while(period++ <= 1000) { if (dn > curr) { decimalStr += 0 } else { decimalStr += parseInt(curr/dn) curr = remainder = curr%dn } curr *= 10 if (remainder === n) break } return decimalStr.slice(1) // 정수부 제외 } // 8, 10, 16진법 지원해야함 // find parasitic number ending in n function calculateSpecial(n, base) { return bigDivide(n, 10*n - 1) }
JavaScript
복사

test code

describe("Tests", () => { it("test", () => { Test.assertEquals(calculateSpecial(4, 10), '102564'); Test.assertEquals(calculateSpecial(3, 10), '1034482758620689655172413793'); Test.assertEquals(calculateSpecial(2, 10), '105263157894736842'); Test.assertEquals(calculateSpecial(1, 10), '1'); }); });
JavaScript
복사