C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++】数値の桁の合計が1桁になるまで計算するプログラムの作成方法

はじめに

本記事では、数値の各桁の合計を計算し、その結果が1桁になるまで処理を繰り返すC++プログラムについて解説します。

例として、数値14520を考えてみましょう。まず各桁を足すと、1 + 4 + 5 + 2 + 0 = 12となります。しかし12はまだ2桁の数値なので、さらにその桁同士を足し合わせます。すると、1 + 2 = 3となります。

3は1桁の数値であるため、これ以上桁の合計を計算することはできません。したがって、3が最終的な答えとなります。

解法のアプローチ:デジタルルートの活用

この問題を効率的に解くには、「9の倍数の各桁の合計は必ず9になる」という数学的な性質を利用します。9で割り切れない数値の場合は、その数値を9で割った余りが最終的な合計になります。

この性質は「デジタルルート」と呼ばれる概念に基づいています。実際に各桁を何度も足し合わせる方法と比べ、ループや再帰を使用せずに済むため、はるかに高速かつシンプルに計算できるのが大きなメリットです。

サンプルコード

#include<bits/stdc++.h>
using namespace std;
// 9による割り算の可否をチェックする関数
int sum_digits(int n) {
    if (n == 0)
        return 0;
    else if (n % 9 == 0)
        return 9;
    else
        return (n % 9);
}
int main() {
    int x = 14520;
    cout << sum_digits(x) << endl;
    return 0;
}

出力結果

3

コードの解説

sum_digits関数の処理の流れは以下の通りです。

  • 入力が0の場合:0をそのまま返します。
  • 入力が9で割り切れる場合:9を返します(例:18 → 1 + 8 = 9)。
  • 上記以外の場合:9で割った余りを返します(例:14520 ÷ 9 の余り = 3)。

この実装により、数値がどれほど大きくても一定時間で答えを求めることができます。競技プログラミングなどでも頻出するテクニックなので、ぜひ覚えておきましょう。

  1. C++で数の奇数の約数(奇因子)の合計を求めるプログラム

    正の整数が与えられたとき、その数の奇数の約数(奇因子)をすべて求め、それらの合計を計算するのが本プログラムの目的です。 例 入力: number = 20 出力: 奇数の約数の合計は: 6 入力: number = 18 出力: 奇数の約数の合計は: 13 例えば number = 20 の場合、約数は 1, 2, 4, 5, 10, 20 ですが、このうち奇数は 1 と 5 のみです。したがって、結果 = 1 + 5 = 6 となります。 プログラムで使用するアプローチ 奇数の約数の合計を計算する対象の数を入力する 偶数の約数を除外するため、まず数を2で割り切れる限り2で割り続け、奇数の部

  2. Pythonで各桁の合計を1桁になるまで繰り返し計算する方法【デジタルルート】

    正の整数 n が与えられたとき、そのすべての桁の数字を足し合わせて新しい数を作り、この操作を結果が10未満(1桁)になるまで繰り返すことを考えます。このようにして得られる「1桁に還元された数」はデジタルルート(数根)と呼ばれる有名な概念です。 例えば、入力が 9625 の場合、出力は 4 になります。計算の流れは以下のとおりです。 9 + 6 + 2 + 5 = 22 2 + 2 = 4 解法のアプローチ この問題は、再帰呼び出しを利用すると簡潔に解くことができます。具体的な手順は次のとおりです。 solve() メソッドを定義し、引数として n を受け取る n < 10 の場合、