【Dart】自然数の各桁の数を足す

はじめに

アルゴリズムのちょっとしたメモです。自然数の各桁の数を足します。

実施するソース

一般的な書き方

10の余りを計算して1桁目を取得します。その次に10で割って、十の桁を一の桁に移動させます。値がなくなるまで、足し続けます。

  int getSumDigit(int value) {
    int total = 0;
    while (0 < value) {
      total += value % 10;
      value = (value / 10).floor();
    }
    return total;
  }
  • total += value % 10;
    value を10で割った余り(つまり、value の1の位の数字)を total に加算しています。
  • value = (value / 10).floor();
    value を10で割り、小数点以下を切り捨てることで、次の桁の数字に移動しています。.floor() メソッドは、数値を小数点以下で切り捨てるために使用されます。value が0になると、ループは終了します。

Dart特有の書き方

Dartのメソッドを使えば、以下のように一行で書ける。

final sum = value.toString().split('').map(int.parse).reduce((v, e) => v + e);
  • value.toString()
    整数 i を文字列に変換します。これにより、各桁の数字にアクセスできます。

  • split(”)
    文字列を空文字(”)で分割し、各桁の数字を要素とするリストを生成します。

  • map(int.parse)
    リストの各要素(文字列型の各桁の数字)を整数に変換します。int.parse は文字列を整数に変換する関数です。map メソッドはリストの各要素に関数を適用し、新しいリストを生成します。

  • reduce((v, e) => v + e)
    リストの要素を結合して単一の値にします。この例では、各桁の数字の合計を求めるために、リストの要素を加算していきます。reduce メソッドは、リストの最初の2つの要素に関数(この場合は (v, e) => v + e)を適用し、その結果と次の要素に関数を適用していくことで、リスト全体を単一の値にまとめます。

まとめ

各桁数を合計する方法を2つ記載しました。
一つはプログラムで汎用的にできる方法、二つ目はDartの標準で一行でできる方法をまとめました。