最大公約数を求める
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
const main = () => { 'use strict' const p = console.log const calcGreatestCommonFactor = (arg1, arg2) => { let a = Number(arg1) let b = Number(arg2) /* 絶対値にする */ if (a < 0) { a *= -1 } if (b < 0) { b *= -1 } /* 同じ値ならそのまま返却する */ if (a === b) { return a } /* 片方が0ならもう片方の値が最大公約数になる */ if (a === 0) { return b } if (b === 0) { return a } /* aの方を大きくする */ if (a < b) { const c = a a = b b = c } // 余り(初期値は引数の小さい方) let rem = b /* 最大公約数を求めるループ */ while (true) { rem = a % b /* 割り切れたら、その時割った値が最大公約数 */ if (rem === 0) { return b } a = b b = rem } } const spacePadding = (n, keta = 4) => { const strN = '' + n const nKeta = strN.length if (keta < nKeta) { return strN } let pad = '' for (let i = 0; i < keta; i++) { pad += ' ' } return (pad + strN).slice(-keta) } const dispGreatestCommonFactor = (a, b) => { let gcf = calcGreatestCommonFactor(a, b) a = spacePadding(a) b = spacePadding(b) gcf = spacePadding(gcf) p(`${a} と ${b} の最大公約数は ${gcf}`) } /* 最大公約数を求めて出力する */ dispGreatestCommonFactor(4997, 7890); dispGreatestCommonFactor(147, 105); dispGreatestCommonFactor(0, 19); } main() |
1 2 3 |
4997 と 7890 の最大公約数は 263 147 と 105 の最大公約数は 21 0 と 19 の最大公約数は 19 |