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

2つの整数の間のアームストロング数の求め方|C言語サンプルコード付きで解説

アームストロング数とは?

アームストロング数(Armstrong Number)とは、n桁の整数の各桁を取り出してそれぞれn乗し、それらを合計した値が元の数と一致するような整数のことです。数式で表すと次のようになります。

abcd... = an + bn + cn + dn + ...

特に3桁のアームストロング数の場合は、「各桁の数字の3乗の和がその数自身と等しい」という条件になります。最も有名な例が 153 です。

153 = 13 + 53 + 33 = 1 + 125 + 27 = 153
つまり、153 はアームストロング数です。

ほかにも、370、371、407 などが3桁のアームストロング数として知られています。

実行結果のイメージ

入力:2つの数(範囲)を入力してください:999 9999
出力:999から9999までのアームストロング数は:1634 8208 9474

解説

1634 = 13 + 63 + 33 + 43
     = 1 + 216 + 27 + 64
     = 1634

4桁の数である 1634 も、各桁の4乗の和が元の数と一致するため、アームストロング数に該当します。

アルゴリズムの考え方

ここで紹介する手法はとてもシンプルです。処理の手順は以下の通りです。

1. 指定された範囲内のすべての数を順番に調べる
2. 各数について、まず桁数を数える(現在の数の桁数を n とする)
3. 各桁の数字を n 乗した値の合計を計算する
4. 合計が元の数と一致していれば、その数を出力する

C言語での実装例

#include <stdio.h>
#include <math.h>

int main() {
    int low = 100;
    int high = 400;
    printf("%dから%dまでのアームストロング数は \n", low, high);

    for (int i = low + 1; i < high; ++i) {
        int x = i;
        int n = 0;

        /* 桁数を数える */
        while (x != 0) {
            x /= 10;
            ++n;
        }

        /* 各桁の n 乗の和を計算 */
        int pow_sum = 0;
        x = i;
        while (x != 0) {
            int digit = x % 10;
            pow_sum += pow(digit, n);
            x /= 10;
        }

        if (pow_sum == i)
            printf("%d ", i);
    }
    printf("\n");
    return 0;
}

実行結果

100から400までのアームストロング数は 
153 

まとめ

アームストロング数の判定は、「桁数を数える」「各桁をn乗して足し合わせる」「元の数と比較する」という3つのステップで実現できます。変数 low と high の値を変更すれば、任意の区間のアームストロング数を簡単に求められます。ぜひさまざまな範囲で試してみてください。

  1. C++でデューデニー数(Dudeney Number)を判定する方法

    デューデニー数とは? デューデニー数(Dudeney Number)とは、数論で定義される特殊な自然数の一つです。「ある自然数が、別の自然数の完全立方数に等しく、かつ元の数の各桁の数字和が、その立方根となる数の桁和と一致する」とき、その数をデューデニー数と呼びます(Wikipediaより)。 この数は、イギリスの著名なパズル作家であるヘンリー・デューデニー(Henry Dudeney)によって発見されました。数学的には次の式で表されます。 有名な例としては 512 = 8³ が挙げられます。512 の桁和は 5 + 1 + 2 = 8 となり、立方根である 8 と一致するため、512 はデ

  2. Pythonでアームストロング数を判定・生成する方法をわかりやすく解説

    3桁の整数のうち、各桁の数字を3乗した値の合計が元の数と一致するものをアームストロング数(Armstrong number)と呼びます。たとえば「153」は、1³ + 5³ + 3³ = 1 + 125 + 27 = 153 となるため、アームストロング数です。ある数がこの条件を満たすかどうかを調べるには、右端の桁から順に1桁ずつ取り出し、その3乗を累積的に加算していきます。最終的な合計が元の数と一致すれば、その数はアームストロング数であると判断できます。アームストロング数の判定プログラム以下のPythonコードは、100から999までの範囲に存在するすべてのアームストロング数を出力する例です