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

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 namespace std;
int getDigitSum(int n) {
    int sum = 0;
    while (n) {
        sum += n % 10;
        n /= 10;
    }
    return sum;
}
int getNumber(int n) {
    for (int i = 0; i <= n; i++)
        if (i + getDigitSum(i) == n)
            return i;
    return -1;
}
int main() {
    int n = 21;
    cout << "The value of x is: " << getNumber(n);
}

実行結果

The value of x is: 15

コードの解説

getDigitSum関数は、数値の各桁を抽出して合計を計算します。「n % 10」で最下位の桁を取り出し、「n /= 10」で桁を一つずらす操作を繰り返すことで、すべての桁の合計を求められます。

getNumber関数では、0からnまでの各数値iについて「i + iの桁の合計」がnと一致するかを判定します。条件を満たす数が見つかればその値を即座に返し、見つからない場合は-1を返して「該当する数が存在しない」ことを示します。

この方法の計算量はO(n × 桁数)となり、nがそれほど大きくない場合には十分実用的です。ただし、nが非常に大きい場合は、より効率的な探索方法を検討する必要があります。

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

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

  2. PythonでAの倍数かつ桁の合計がBと等しい最小の正の整数を求める方法

    問題の概要 2つの整数 A と B が与えられたとき、「A で割り切れ、かつ各桁の数字の合計が B と等しい」という条件を満たす最小の正の整数 M を求めます。そのような数が存在しない場合は -1 を返します。 例えば、入力が A = 50、B = 2 の場合、出力は 200 となります。200 は 50 で割り切れ、桁の合計も 2 + 0 + 0 = 2 となり、両方の条件を満たす最小の数だからです。 解法のアプローチ:幅優先探索(BFS) この問題は幅優先探索(BFS)を用いることで効率的に解けます。BFS は桁数の少ない数から順に探索を進めるため、最初に見つかった解が必ず最小値になりま