【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つが出力されています。
-
Javaで2つの区間の間にある素数を表示するプログラム
この記事では、指定した2つの区間(範囲)の間にある素数を表示するJavaプログラムの作成方法について解説します。素数とは、1とその数自身の2つだけを約数に持ち、それ以外のどの数でも割り切ることのできない特別な数です。 ある数が素数であるのは、その約数が1とその数自身だけである場合です。たとえば11は素数であり、その約数は1と11のみです。素数の例としては、2、3、5、7、11、13などが挙げられます。なお、2は唯一の偶数の素数であり、それ以外の素数はすべて奇数になります。 実行例 以下に入力と出力の例を示します。 入力 入力値が次のとおりであるとします。 開始番号 : 1 終了番号 : 75
-
Javaで2つの整数の間のアームストロング数を求める方法
この記事では、Javaを使って指定した2つの数値の間に存在するアームストロング数(Armstrong数)をすべて表示する方法を解説します。アームストロング数とは?アームストロング数とは、各桁の数字を取り出して3乗し、その合計が元の数と等しくなる数のことです。より一般的に定義すると、n桁の整数の各桁を分離して3乗し、合計した結果が元の数と一致する場合、その整数はアームストロング数と呼ばれます。数式で表すと次のようになります。abcd... = a³ + b³ + c³ + d³ + ...3桁のアームストロング数の場合、各桁の3乗の合計がその数そのものと一致します。例1:153の場合153 =