JavaScriptで数値の各桁の合計を一桁になるまで再帰的に計算する方法
JavaScriptでは、数値の各桁を合計し、その結果が一桁になるまで再帰的に処理を繰り返す関数が必要となる場面があります。このような操作は「デジタルルート」とも呼ばれ、チェックデジットの計算や数値の性質を調べる際などに役立ちます。
要件
今回実装する関数には、以下の条件があります。
- 数値の各桁の合計を求める
- 結果が一桁になるまで合計処理を繰り返す
- 数値を文字列やその他のデータ型に変換せずに実装する
文字列変換を使わないため、算術演算だけで各桁を取り出していくのがポイントです。
実装例
それでは、実際のコードを見てみましょう。
const num = 546767643;
const sumDigit = (num, sum = 0) => {
if(num){
return sumDigit(Math.floor(num / 10), sum + (num % 10));
}
return sum;
};
const sumRepeatedly = num => {
while(num > 9){
num = sumDigit(num);
};
return num;
};
console.log(sumRepeatedly(num));
コードの解説
このコードは、2つの関数で構成されています。
sumDigit関数
再帰呼び出しを使って各桁の合計を計算します。num % 10で最後の一桁を取り出し、Math.floor(num / 10)でその桁を除いた残りの数値を取得します。これを数値が0になるまで再帰的に繰り返すことで、すべての桁の合計が求まります。
sumRepeatedly関数
sumDigitの結果が9以下(つまり一桁)になるまで、whileループで合計処理を繰り返します。条件判定はnum > 9で行うため、すでに一桁の数値が渡された場合はそのまま返されます。
出力結果
コンソールには次のように出力されます。
3
例として挙げた数値546767643の場合、まず 5+4+6+7+6+7+6+4+3 = 48 となり、さらに 4+8 = 12、そして 1+2 = 3 となるため、最終的な結果は「3」になります。このように、一度の合計で一桁にならない場合でも、繰り返し処理によって必ず一桁の数値へと収束させることができます。
-
JavaScriptで数値の各桁の数字を一つずつ分割表示する方法
はじめに この記事では、ユーザーが入力した数値を検証し、有効な数値であればその各桁の数字を画面に一つずつ表示するJavaScriptプログラムの作り方を解説します。 動作イメージ ページ上のボタンをクリックすると入力ダイアログが開き、そこに数値を入力してOKを押すと、入力された数値の各桁が一行ずつ画面に出力される仕組みです。 例えば、入力が次のような場合—— 43354 画面には次のように表示されます。 4 3 3 5 4 完成コード HTML <!DOCTYPE html> <html> <head> &n
-
JavaScriptで数値の階乗の桁数を求める方法
問題JavaScriptで、数値 num を唯一の引数として受け取る関数を作成することを考えます。この関数は、num の階乗(n!)が何桁になるかを計算し、その桁数を返す必要があります。たとえば、関数への入力が次のような場合を考えてみましょう。入力const num = 7;出力const output = 4;出力の解説7! = 5040 であり、5040は4桁の数字であるため、結果は 4 となります。アプローチ:対数を使った賢い計算方法一見すると、階乗を直接計算して文字列の長さを数えればよさそうに思えます。しかし、階乗は極めて急激に増加するため、少し大きな数でもすぐにJavaScriptの