【JavaScript】数値に最も近い2の累乗を求める方法
本記事では、任意の数値を受け取り、その数値に最も近い「2の累乗」の値を返すJavaScript関数の実装方法を解説します。
要件の確認
たとえば、入力された数値が365だった場合、出力は256になります。これは、365に最も近く、ある整数nに対して「2^n」と表すことができる数が256(2の8乗)だからです。
ちなみに365は256(2^8)と512(2^9)の間にありますが、「365 − 256 = 109」「512 − 365 = 147」となり、256の方が近いためこの結果になります。
コード例
それでは、実際に関数を実装してみましょう。
const num = 365;
const nearestPowerOfTwo = num => {
// 負の数は絶対値に変換して処理
if(num < 0){
num *= -1;
}
let base = 1;
while(base < num){
// 次の累乗よりも現在のbaseの方が近ければ返す
if(num - base < Math.floor(base / 2)){
return base;
};
base *= 2;
};
return base;
};
console.log(nearestPowerOfTwo(num));
実行結果
コンソールには以下のように出力されます。
256
コードの解説
- 負の数への対応: 入力が負の値だった場合は「-1を掛けて絶対値に変換」し、非負の数として処理します。これにより、どんな整数でも正しく動作します。
- 基準値の初期化: 変数
baseを1(2の0乗)からスタートさせます。 - ループ処理:
baseが入力値num未満である間、ループを繰り返します。 - 距離の判定: 条件式「
num - base < Math.floor(base / 2)」により、現在のbaseと次の累乗(base × 2)のどちらがnumに近いかを判定しています。numが現在のbaseとの差が半分未満であれば、次の累乗より近いと判断できます。 - 累乗の更新: 判定条件を満たさなければ、
baseを2倍して次の累乗へ進みます。
このように、シンプルなループと比較処理だけで、目的の値に最も近い2の累乗を効率よく求めることができます。ビット演算や対数を使った別のアプローチもありますが、この方法はロジックが直感的で理解しやすいのが特徴です。
-
JavaScriptで数値を最も近い10の累乗に丸める関数の実装方法
本記事では、数値を受け取り、その数値に最も近い10の累乗(べき乗)を返すJavaScript関数の実装方法について解説します。 要件 入力された数値に対して、最も近い10の累乗を返す関数を作成します。期待される動作は以下の通りです。 f(1) = 1f(5) = 1f(15) = 10f(43) = 10f(456) = 100f(999) = 100 コード例 実際のコードは以下のようになります。 const num = 2355;const num1 = 346;const num2 = 678;const nearestPowerOfTen = (num) => {&nbs
-
【JavaScript】数値の約数をすべて求める関数の実装方法
はじめに本記事では、正の整数を1つ引数として受け取り、その数を余りなく割り切れるすべての数(約数)を配列として返すJavaScript関数の実装方法を解説します。問題の定義作成する関数は、正の整数を唯一の引数として受け取ります。そして、入力された数値を完全に割り切れるすべての数値を要素とする配列を構築して返す必要があります。例えばー入力が次の数値だった場合:const num = 12;期待される出力は以下のとおりです。const output = [1, 2, 3, 4, 6, 12];12の場合、1・2・3・4・6・12の6つの整数が12を割り切れるため、これらが約数となります。実装コード