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

アームストロング数を判定するC++プログラムの書き方と解説

アームストロング数とは

アームストロング数(Armstrong Number)とは、各桁の数字を「総桁数」乗した値の合計が、元の数そのものと等しくなる数のことです。例えば、153は3桁の数なので、各桁を3乗して足し合わせると元の数に戻ります。主なアームストロング数の例は以下の通りです。

3 = 3^1
153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
371 = 3^3 + 7^3 + 1^3 = 27 + 343 + 1 = 371
407 = 4^3 + 0^3 + 7^3 = 64 + 0 + 343 = 407

この性質を利用すると、任意の整数がアームストロング数であるかどうかをプログラムで簡単に判定できます。以下では、C++を使った具体的な実装方法を紹介します。

アームストロング数を判定するC++プログラム

次のプログラムは、与えられた数がアームストロング数かどうかを判定するものです。

#include <iostream>
#include <cmath>
using namespace std;
int main() {
   int num = 153, digitSum, temp, remainderNum, digitNum ;
   temp = num;
   digitNum = 0;
   while (temp != 0) {
      digitNum++;
      temp = temp/10;
   }
   temp = num;
   digitSum = 0;
   while (temp != 0) {
      remainderNum = temp%10;
      digitSum = digitSum + pow(remainderNum, digitNum);
      temp = temp/10;
   }
   if (num == digitSum)
   cout<<num<<" is an Armstrong number";
   else
   cout<<num<<" is not an Armstrong number";
   return 0;
}

実行結果

153 is an Armstrong number

プログラムの処理の流れ

このプログラムでは、与えられた数がアームストロング数であるかどうかを、いくつかのステップに分けて判定しています。それぞれの処理を詳しく見ていきましょう。

ステップ1:桁数を求める

まず、対象となる数の桁数を求めます。数を10で繰り返し割り、割り切れるたびに変数digitNumを1ずつ増やすことで、桁数をカウントしています。

temp = num;
digitNum = 0;
while (temp != 0) {
   digitNum++;
   temp = temp/10;
}

ステップ2:各桁の累乗和を計算する

桁数が分かったら、次に各桁の数字を桁数(digitNum)乗した値を順番に加算し、digitSumを求めます。temp%10によって最下位の桁を1桁ずつ取り出し、cmathヘッダのpow関数で累乗を計算しています。

temp = num;
digitSum = 0;
while (temp != 0) {
   remainderNum = temp%10;
   digitSum = digitSum + pow(remainderNum, digitNum);
   temp = temp/10;
}

ステップ3:元の数と比較して判定する

最後に、元の数numと計算結果のdigitSumを比較します。両者が一致していればその数はアームストロング数であると出力し、一致しなければアームストロング数ではないと出力します。

if (num == digitSum)
cout<<num<<" is an Armstrong number";
else
cout<<num<<" is not an Armstrong number";

このように、桁数の取得・累乗和の計算・比較という3つのステップを組み合わせることで、任意の整数がアームストロング数かどうかを効率的に判定できます。初心者の方も、ループ処理や剰余演算の練習としてぜひ試してみてください。

  1. C++で配列がビトニック配列かどうかを判定するプログラム

    N個の整数からなる配列 arr[N] が与えられたとき、その配列がビトニック配列であるかどうかを判定するのが本記事のテーマです。ビトニック配列であれば「Yes its a bitonic array」と出力し、そうでなければ「No its not a bitonic array」と出力します。ビトニック配列とは、まず厳密に増加し、その後厳密に減少するような配列のことです。たとえば arr[] = {1, 2, 3, 4, 2, -1, -5} という配列は、4までは厳密に増加しており、4以降は厳密に減少しているため、ビトニック配列といえます。入力例と出力例入力arr[] = {1, 3, 5,

  2. Pythonでアームストロング数を判定するプログラムの書き方

    この記事では、与えられた整数が「アームストロング数(Armstrong number)」であるかどうかを判定するための考え方と、Pythonによる具体的な実装方法を解説します。 問題の定義 整数 n が与えられたとき、その整数がアームストロング数であるかどうかを判定することを目標とします。 アームストロング数とは? n 桁の正の整数 abcd… が次の条件を満たすとき、この数は「n 次(オーダー n)のアームストロング数」と呼ばれます。 abcd... = a^n + b^n + c^n + d^n + … つまり、各桁の数字を「桁数乗」した値の総和が、元の数と一致するかを確認す