C#で再帰を使用して数値の各桁の合計を求める方法
C#では、再帰(リカーシブ)処理を利用することで、数値の各桁の合計をシンプルかつ効率的に計算できます。本記事では、実際のコード例を通じて、その実装方法と動作の仕組みを詳しく解説します。
対象となる数値の設定
まず、桁の合計を求めたい数値を変数に設定します。ここでは例として「789」を使用します。
int val = 789;
Console.WriteLine("Number: {0}", val);
再帰による桁の合計の計算方法
次のメソッドでは、引数として受け取った数値を10で割った余り(最下位の桁)を取り出し、10で割った商(残りの桁)に対して自分自身を再帰的に呼び出すことで、すべての桁の合計を求めています。
public int addFunc(int val) {
if (val != 0) {
return (val % 10 + addFunc(val / 10));
} else {
return 0;
}
}
処理の流れ
この再帰処理は以下の仕組みで動作します。
- val % 10:数値の最後の桁(1の位)を取り出します。
- val / 10:最後の桁を取り除いた残りの数値を取得します。
- 終了条件:valが0になった時点で再帰を終了し、0を返します。
例えば「789」の場合、7 + 8 + 9 の計算が順に行われ、結果として 24 が得られます。
完全なサンプルコード
以下は、C#で再帰を使用して数値の桁の合計を求める完全なプログラムです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Demo {
class MyApplication {
static void Main(string[] args) {
int val, result;
Calc cal = new Calc();
val = 789;
Console.WriteLine("Number: {0}", val);
result = cal.addFunc(val);
Console.WriteLine("Sum of Digits in {0} = {1}", val, result);
Console.ReadLine();
}
}
class Calc {
public int addFunc(int val) {
if (val != 0) {
return (val % 10 + addFunc(val / 10));
} else {
return 0;
}
}
}
}
実行結果
Number: 789 Sum of Digits in 789 = 24
このように、再帰処理を活用すれば、for文やwhile文などのループ構文を使わずに、簡潔なコードで桁の合計を求めることができます。ただし、桁数が非常に多い数値を扱う場合は、呼び出しが深くなることによるスタックオーバーフローに注意が必要です。
-
再帰を使わずに数値の各桁の合計を求めるPythonプログラム
プログラミングにおいて、数値の各桁の合計を求める処理は頻出する課題の一つです。再帰呼び出しを使わずにこの問題を解決したい場合、「%」演算子(剰余)、「+」演算子(加算)、そして「//」演算子(整数除算)を組み合わせることで、シンプルかつ効率的に実装できます。 実装のポイント 基本的な考え方は以下の通りです。 「% 10」で最下位の桁(1の位)を取り出す 取り出した桁を合計値に加算する 「// 10」で数値を1桁ずらし、数値が0になるまで繰り返す サンプルコード def sum_of_digits(my_num): sum_val = 0 while (my_num != 0
-
Pythonで数値の各桁の合計を求める方法(文字列を使わない実装)
ある数値 num が与えられたとき、その各桁の数字をすべて足し合わせた合計を求めます。ここでは、文字列に変換せず、数値演算だけで解く方法を紹介します。たとえば、入力が num = 512 の場合、5 + 1 + 2 = 8 となるため、出力は 8 になります。解き方の手順合計を格納する変数 sum を 0 で初期化します。num が 0 になるまで、次の処理を繰り返します。sum に「num を 10 で割った余り」(最下位の桁)を加算します。num を「10 で割った商」(整数)で更新します。繰り返しが終わったら sum を返します。アルゴリズムのポイントこの手法では、「10 で割った余り」