JavaScriptで「*」演算子を使わずに2つの整数の積を求める方法
JavaScriptでは、通常2つの数値の積を求める際に「*」演算子を使用します。しかし、コーディング試験や学習課題などでは、この演算子を使わずに積を計算する関数を実装する必要があることがあります。
本記事では、そのような場面で役立つ2つのテクニックを具体的なコード例とともに紹介します。
方法1:除算演算子を2段階で利用する
乗算と除算は互いに逆の演算であるという性質を利用します。「ある数を、もう一方の数の逆数で割る」ことは、実質的に2つの数を掛け合わせることと同じになります。つまり、次の関係式が成り立ちます。
a × b = a ÷ (1 / b)
これをコードにすると、以下のようになります。
const a = 20, b = 45; const product = (a, b) => a / (1 / b); console.log(product(a, b));
方法2:対数(ログ)の性質を利用する
対数には、掛け算を足し算に変換できるという便利な性質があります。
log(a) + log(b) = log(ab)
この性質を活かし、2つの数それぞれの対数を足し合わせた後、指数関数(exp)で元に戻すことで、乗算演算子なしで積を求めることができます。
コード例
const a = 20, b = 45;
const product = (a, b) => {
const logProduct = Math.log(a) + Math.log(b);
return Math.round(Math.exp(logProduct));
};
console.log(product(a, b));
実行結果
どちらの方法でも、コンソールには同じ結果が出力されます。
900
使用時の注意点
これらのテクニックは面接対策やアルゴリズムの学習には有効ですが、実務での利用にはいくつかの留意点があります。
- 浮動小数点誤差:対数や逆数の計算では丸め誤差が発生する可能性があるため、方法2では
Math.round()で結果を補正しています。 - ゼロの扱い:方法1では
b = 0のとき1 / bがInfinityになり、結果はNaNとなります。方法2でもMath.log(0)は-Infinityを返すため、ゼロは扱えません。 - 負の数:
Math.log()は負の数に対してNaNを返すため、方法2は負の数に対応していません。
正確な計算が求められる実際のアプリケーションでは、素直に「*」演算子を使用するのが最も安全で信頼できる選択です。
-
JavaScriptで親要素の子要素を取得する方法【サンプルコード付き】
JavaScriptでは、親要素が持つchildrenプロパティを参照することで、その直下にある子要素をまとめて取得できます。本記事では、実際に動作するサンプルコードを使いながら、具体的な手順をわかりやすく解説します。 サンプルコード 以下は、JavaScriptを使って親要素(parent1)の子要素を取得し、ボタンのクリックで一括表示させる例です。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta nam
-
JavaScriptでh1のinnerTextを取得する方法|子要素のテキストを除外する
h1タグ内に子要素(spanなど)が含まれている場合、単純にinnerTextを取得すると子要素のテキストまで一緒に取られてしまいます。h1直下のテキストのみを取得したい場合は、childNodesとtextContentを組み合わせることで実現できます。 childNodes[0].textContent; 仕組みの解説 querySelector()で取得したh1要素に対してchildNodesを使うと、その子ノードの一覧(NodeList)が返されます。[0]で最初の子ノード、つまりh1直下のテキストノードにアクセスし、そこからtextContentを取得することで、子要素内のテキストを