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
๋ณต์ฌ
