C 言語でアームストロング数を判定する方法

CBeginner
オンラインで実践に進む

はじめに

この実験では、C プログラムを使用して、与えられた数がアームストロング数かどうかを確認する方法を学びます。まず、ユーザーから整数を入力を読み取り、次に各桁の数をその桁数の総乗数乗の和を計算し、最後に、その数がアームストロング数かどうかを出力します。

このプログラムは、入力の読み取りから、数がアームストロング数かどうかを判断するまで、段階的にユーザーをプロセスを通して案内します。

整数の入力

このステップでは、C プログラムでユーザーから整数を入力を受け取り、それがアームストロング数かどうかをチェックする方法を学びます。

まず、プロジェクトディレクトリに新しい C ファイルを作成しましょう。

cd ~/project
nano armstrong.c

次に、整数を取得するための初期コードを記述します。

#include <stdio.h>

int main() {
    int number;

    // ユーザーに数値を入力するよう促す
    printf("アームストロング数かどうかをチェックする数値を入力してください:");

    // 整数入力を読み取る
    scanf("%d", &number);

    // 入力された数値を出力して確認する
    printf("入力された数値:%d\n", number);

    return 0;
}

プログラムをコンパイルして実行します。

gcc armstrong.c -o armstrong
./armstrong

出力例:

アームストロング数かどうかをチェックする数値を入力してください: 153
入力された数値: 153

コードを詳しく見てみましょう。

  • scanf("%d", &number) は、ユーザー入力から整数を読み取ります。
  • &number は、number 変数のメモリアドレスを渡します。
  • printf() は、ユーザーにメッセージを表示し、入力された数値を出力するために使用されます。

各桁の数字を桁数乗した合計の計算

このステップでは、各桁の数字をその桁数の総乗数乗した合計を計算するプログラムを修正します。

armstrong.c ファイルを開きます。

cd ~/project
nano armstrong.c

桁数の合計を計算するコードを更新します。

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

int main() {
    int number, originalNumber, remainder, digitCount = 0;
    long long digitSum = 0;

    // ユーザーに数値を入力するよう促す
    printf("アームストロング数かどうかをチェックする数値を入力してください:");
    scanf("%d", &number);

    // 後で比較するために元の数値を保存する
    originalNumber = number;

    // 桁数をカウントする
    while (number != 0) {
        number /= 10;
        digitCount++;
    }

    // number を元の値に戻す
    number = originalNumber;

    // 各桁の数字を桁数乗した合計を計算する
    while (number != 0) {
        remainder = number % 10;
        digitSum += pow(remainder, digitCount);
        number /= 10;
    }

    // 結果を出力する
    printf("桁数:%d\n", digitCount);
    printf("各桁を桁数乗した合計:%lld\n", digitSum);

    return 0;
}

数学ライブラリを使用してプログラムをコンパイルします。

gcc armstrong.c -o armstrong -lm
./armstrong

出力例:

アームストロング数かどうかをチェックする数値を入力してください: 153
桁数: 3
各桁を桁数乗した合計: 153

重要な概念の説明:

  • digitCount は桁数を追跡します。
  • pow(remainder, digitCount) は各桁を総桁数乗します。
  • number % 10 は最後の桁を抽出します。
  • number /= 10 は各反復で最後の桁を取り除きます。
  • long long は、潜在的に大きな桁数の合計を扱うために使用されます。

アームストロング数かどうか判定する

このステップでは、計算された桁数の合計と元の数値を比較することで、アームストロング数チェッカーを完成させます。

armstrong.c ファイルを開きます。

cd ~/project
nano armstrong.c

数値がアームストロング数かどうかを判定し、出力するコードを更新します。

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

int main() {
    int number, originalNumber, remainder, digitCount = 0;
    long long digitSum = 0;

    // ユーザーに数値を入力するよう促す
    printf("アームストロング数かどうかをチェックする数値を入力してください:");
    scanf("%d", &number);

    // 後で比較するために元の数値を保存する
    originalNumber = number;

    // 桁数をカウントする
    while (number != 0) {
        number /= 10;
        digitCount++;
    }

    // number を元の値に戻す
    number = originalNumber;

    // 各桁の数字を桁数乗した合計を計算する
    while (number != 0) {
        remainder = number % 10;
        digitSum += pow(remainder, digitCount);
        number /= 10;
    }

    // 数値がアームストロング数かどうかをチェックする
    if (digitSum == originalNumber) {
        printf("%d はアームストロング数です。\n", originalNumber);
    } else {
        printf("%d はアームストロング数ではありません。\n", originalNumber);
    }

    return 0;
}

プログラムをコンパイルします。

gcc armstrong.c -o armstrong -lm
./armstrong

出力例:

アームストロング数かどうかをチェックする数値を入力してください: 153
153 はアームストロング数です。

アームストロング数かどうかをチェックする数値を入力してください: 154
154 はアームストロング数ではありません。

重要な概念の説明:

  • digitSumoriginalNumber を比較します。
  • 等しい場合、アームストロング数です。
  • プログラムはさまざまな入力状況に対応します。

まとめ

この実験では、ユーザーから整数を入力し、各桁の数字を総桁数乗した合計を計算し、その数値がアームストロング数かどうかを判定する方法を学びます。最初のステップでは、ユーザーに数値を入力するように促し、変数に格納します。2 番目のステップでは、各桁の数字を総桁数乗した合計を計算し、その合計を元の数値と比較して、アームストロング数かどうかを判定します。