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

【C++入門】指定した範囲内のアームストロング数をすべて表示する方法

アームストロング数(Armstrong Number)とは、各桁の数字を「桁の総数」乗した値の合計が、元の数と等しくなるような数のことです。

アームストロング数の例を以下に示します。

3 = 3^1
153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
407 = 4^3 + 0^3 + 7^3 = 64 + 0 + 343 = 407
1634 = 1^4 + 6^4 + 3^4 + 4^4 = 1 + 1296 + 81 + 256 = 1634

それでは、2つの範囲(区間)の間に存在するアームストロング数をすべて表示するプログラムを見ていきましょう。

サンプルコード

#include <iostream>
#include <cmath>
using namespace std;
int main() {
    int lowerbound, upperbound, digitSum, temp, remainderNum, digitNum;
    lowerbound = 100;
    upperbound = 500;
    cout<<"Armstrong Numbers between "<<lowerbound<<" and "<<upperbound<<" are: ";
    for(int num = lowerbound; num <= upperbound; num++) {
        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<<" ";
    }
    return 0;
}

実行結果

Armstrong Numbers between 100 and 500 are: 153 370 371 407

プログラムの解説

このプログラムでは、指定された範囲内に含まれるアームストロング数を段階的な処理によって検出しています。まず、範囲の下限(lowerbound)と上限(upperbound)を設定します。次に、forループを使って下限から上限まで順番に各数値を取り出し、それぞれがアームストロング数かどうかを判定していきます。

該当するコード部分は以下の通りです。

lowerbound = 100;
upperbound = 500;
cout<<"Armstrong Numbers between "<<lowerbound<<" and "<<upperbound<<" are: ";
for(int num = lowerbound; num <= upperbound; num++)

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

forループの中では、まず対象となる数値(num)の桁数を求めます。具体的には、数値を10で割り続けながら、割れるたびにdigitNumを1ずつ増やすことで桁数をカウントしています。

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

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

桁数が判明したら、次に各桁の数字を桁数(digitNum)乗した値を順番に足し合わせて、digitSumを計算します。数値を10で割った余り(%演算子)を使うことで、一の位から順に各桁の数字を取り出すことができます。

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

ステップ3:アームストロング数かどうか判定する

最後に、元の数値とdigitSumが一致するかどうかを比較します。両者が等しければその数はアームストロング数であるため画面に出力し、等しくなければ何も表示しません。

if (num == digitSum)
cout<<num<<" ";

このように、桁数の計算・累乗和の算出・一致判定という3つのステップを組み合わせることで、任意の範囲内のアームストロング数を効率的に見つけることができます。なお、実行例では100〜500の範囲を指定しているため、「153」「370」「371」「407」の4つが出力されています。

  1. Javaで2つの区間の間にある素数を表示するプログラム

    この記事では、指定した2つの区間(範囲)の間にある素数を表示するJavaプログラムの作成方法について解説します。素数とは、1とその数自身の2つだけを約数に持ち、それ以外のどの数でも割り切ることのできない特別な数です。 ある数が素数であるのは、その約数が1とその数自身だけである場合です。たとえば11は素数であり、その約数は1と11のみです。素数の例としては、2、3、5、7、11、13などが挙げられます。なお、2は唯一の偶数の素数であり、それ以外の素数はすべて奇数になります。 実行例 以下に入力と出力の例を示します。 入力 入力値が次のとおりであるとします。 開始番号 : 1 終了番号 : 75

  2. Javaで2つの整数の間のアームストロング数を求める方法

    この記事では、Javaを使って指定した2つの数値の間に存在するアームストロング数(Armstrong数)をすべて表示する方法を解説します。アームストロング数とは?アームストロング数とは、各桁の数字を取り出して3乗し、その合計が元の数と等しくなる数のことです。より一般的に定義すると、n桁の整数の各桁を分離して3乗し、合計した結果が元の数と一致する場合、その整数はアームストロング数と呼ばれます。数式で表すと次のようになります。abcd... = a³ + b³ + c³ + d³ + ...3桁のアームストロング数の場合、各桁の3乗の合計がその数そのものと一致します。例1:153の場合153 =