JavaScriptで2つのn桁の数の積から作られる最大の回文数を求める方法
まず「9009」という数字について考えてみましょう。この数には特別な性質があります。それは、2桁の数同士の掛け算(91 × 99)によって作られる最大の回文数だということです。
今回の課題は、桁数 n を引数として受け取り、n桁の数同士の積の中で最も大きな回文数を見つけて返すJavaScript関数を作成することです。
解法のアプローチ
この問題は総当たりで全ての組み合わせを調べることも可能ですが、効率的に解くために以下の方針を採用します。
- n桁の最大値(例:n = 3 なら 999)と最小値(例:100)を求める。
- 最大値の二乗から降順に候補となる数を調べていく。
- 各候補について回文数かどうかを判定する。
- 回文数が見つかったら、その平方根以上の範囲に n桁の因数が存在するかを確認する。
- 条件を満たす最初の数が見つかった時点で、それが答えとなる。
回文数の判定は、数値を逆順に並べ替えて元の数と一致するかどうかを比較するシンプルな方法で行います。
サンプルコード
以下が実際のコードです。
const largestPalindromic = num => {
let i, n, m, d, max, sup, limit, number = 0;
// n桁の最大値(999...9)を作成
for (i = 1; i < num; i += 1) {
number = 10 * number + 9;
};
max = number;
sup = 10 * number + 9;
// 回文数かどうかを判定する関数
const isPalindromic = n => {
let p = 0, q = n, r;
while (n > 0) {
r = n % 10;
p = 10 * p + r;
n = Math.floor(n / 10);
};
return p === q;
};
// 最大値の二乗から降順に探索
for (n = sup * sup, m = max * max; n > m; n -= 1) {
if (isPalindromic(n)) {
limit = Math.ceil(Math.sqrt(n));
d = sup;
while (d >= limit) {
if (n % d === 0 && n / d > max) {
return n;
}
d -= 1;
}
}
};
}
console.log(largestPalindromic(3));
実行結果
コンソールには以下の出力が表示されます。
906609
3桁の場合、913 × 993 の積である 906609 が、2つの3桁の数の積から作られる最大の回文数となります。このアプローチにより、全ての組み合わせを試すよりも大幅に計算量を抑えながら、正しい答えを効率的に求めることができます。
-
JavaScriptで数字列の中から最大の5桁の連続数字を見つける方法
問題少なくとも5桁以上の数字で構成される文字列を受け取るJavaScript関数を作成する必要があります。この関数は、与えられた数字列の中に含まれる「連続する5桁」の中で最も大きな数値を返さなければなりません。たとえば、入力が 123546544 の場合、取りうる5桁の組み合わせは「12354」「23546」「35465」「54654」「46544」となり、この中で最大のものは 54654 です。解決アプローチ考え方はシンプルです。文字列を先頭から1文字ずつずらしながら、5文字分を切り出す切り出したすべての5桁の部分文字列を配列に格納するMath.max() を使って最大値を求めるJavaSc
-
【C言語】3つの数値の中から最大値を見つけるプログラムの書き方と解説
このプログラムは、3つの数値を受け取り、その中で最も大きい数値(最大値)を見つけます。3つの数値を互いに比較することで、どの数値が最大なのかを判定するシンプルな仕組みです。 入力:a=2、b=4、c=7 出力:7 最大の数値 処理の流れ(解説) このプログラムでは、if文だけを使って最大値を求めます。処理の流れは以下のとおりです。 まず「a」と「b」を比較します。 aがbより大きい場合 → 次に「a」と「c」を比較し、aが大きければaが最大値、そうでなければcが最大値になります。 aがb以下の場合 → 次に「b」と「c」を比較し、bが大きければbが最大値、そうでなければcが最大値になります