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

C++で「数値とその各桁の合計がNに等しい数X」を見つける方法

このチュートリアルでは、「ある数値Xとその各桁の数字の合計を足した値が、与えられた数Nと等しくなる」という条件を満たす数Xを見つける方法を解説します。

解法のアイデア

考え方は非常にシンプルです。与えられた数Nの前後それぞれ100以内の範囲にある数をすべてチェックします。

制約として N ≤ 1,000,000,000(10億)であり、各桁の数字の合計は最大でも100程度にしかなりません。そのため、答えとなる数Xがこの範囲の外側に存在することはありません。

アルゴリズムの手順

  • 対象となる数値Nを初期化します。
  • 0から100まで繰り返すループを作成します。
    • n - i と n + i の値をそれぞれ取得します。
    • それぞれの数値について各桁の合計を計算し、元の数値に加算します。
    • 結果がNと一致した場合、その数値を出力します。

実装例

それでは、実際のコードを見てみましょう。

#include <bits/stdc++.h>
using namespace std;

int digitsSum(int n) {
    int sum = 0;
    while (n) {
        sum += n % 10;
        n /= 10;
    }
    return sum;
}

void findX(long int n) {
    bool is_found = false;
    for (int i = 0; i <= 100; i++) {
        long int valueOnLeft = abs(n - i) + digitsSum(abs(n - i));
        long int valueOnRight = n + i + digitsSum(n + i);
        if (valueOnLeft == n) {
            is_found = true;
            cout << abs(n - i) << " ";
        }
        if (valueOnRight == n) {
            is_found = true;
            cout << (n + i) << " ";
        }
    }
    if (!is_found) {
        cout << "No numbers found";
    }
    cout << endl;
}

int main() {
    int n = 89;
    findX(n);
    return 0;
}

実行結果

上記のプログラムを実行すると、以下の出力が得られます。

76

この例では、76 + 7 + 6 = 89 となり、条件を満たしていることが確認できます。

まとめ

本チュートリアルでは、各桁の数字との合計がNに等しい数Xを効率的に見つける方法を学びました。探索範囲を前後100に限定することで、高速に求解できる点が大きなポイントです。チュートリアルの内容について質問がある場合は、コメント欄でお気軽にお知らせください。

  1. C++を使って「数x + xの桁の合計 = n」となる数xを求める方法

    ここでは、ある数nが与えられたとき、「数xとその桁の合計を足した値がnと等しくなる」ようなxを求める問題を扱います。例えば、nが21の場合、答えはx = 15となります。15の桁の合計は1 + 5 = 6なので、15 + 6 = 21 = nとなり、条件を満たすからです。この問題を解くには、シンプルなアプローチが有効です。0からnまでの数を順番に調べていき、各数値について「その数 + 桁の合計」がnと一致するかどうかを確認します。一致する数が見つかった時点でその値を返し、最後まで見つからなければ-1を返します。サンプルコード#include<iostream> using name

  2. C++で「x + 桁の合計 = n」を満たす数xを見つける方法

    この記事では、ある整数 n が与えられたとき、「x + x の各桁の合計 = n」という条件を満たす数 x を求める問題を解説します。例として、n = 21 の場合を考えてみましょう。このとき答えは x = 15 となります。なぜなら、15 の各桁の合計は 1 + 5 = 6 であり、15 + 6 = 21 となって、与えられた n と一致するからです。解き方のアプローチこの問題はシンプルな方法で解くことができます。1 から n まで順番に数を調べていき、それぞれの数について「その数自身 + 各桁の合計」が n と等しくなるかどうかを確認します。条件を満たす数が見つかった時点で処理を終了し、そ