関数を使って指定範囲内のアームストロング数を表示するJavaプログラム
この記事では、関数を使用して指定した範囲内のアームストロング数(Armstrong Number)を表示する方法について解説します。
アームストロング数とは
アームストロング数とは、各桁の数字を3乗して合計した値が、元の数と等しくなる整数のことです。
より一般的に表現すると、n桁の整数の各桁を取り出してn乗し、その合計が元の数と一致するとき、その整数はn次のアームストロング数と呼ばれます。つまり、abcd... = an + bn + cn + dn + ... という関係が成り立ちます。
3桁のアームストロング数の場合、各桁の3乗の和がその数自身と等しくなります。
例えば、153はアームストロング数です。
153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153
また、371もアームストロング数です。
371 = 3³ + 7³ + 1³ = 27 + 343 + 1 = 371
入力と出力の例
入力:
2つの入力値を以下と仮定します。
2つの入力値 : 1 と 500
出力:
期待される出力は以下の通りです。
アームストロング数 : 153 370 371 407
アルゴリズム
- 処理を開始します(START)。
- 3つの整数変数 my_low、my_high、i を宣言します。
- ユーザーから必要な値を読み込むか、値を直接定義します。
- 整数値を受け取り、ブール値(true/false)を返す関数 IsArmstrong を定義します。
- 関数内で、入力値を10で割った余りを取得します(check)。
- 余り(my_rem)を3回掛けた値を my_sum に加算し、それを現在の my_sum とします。
- check を10で割って更新します。my_sum と関数の入力値 i を比較し、true または false を返します。
- forループで my_low から my_high まで繰り返し、各数値に対して IsArmstrong を呼び出します。true が返された場合はアームストロング数なので、その数を記録します。
- 結果を表示します。
- 処理を終了します(STOP)。
例1: ユーザーからの入力を使用する場合
ここでは、ユーザーがプロンプトに入力した値をもとに処理を行います。オンラインの実行環境でも試すことができます。
import java.util.Scanner;
public class ArmstrongNumbers {
public static void main(String[] args) {
int my_low, my_high, i;
Scanner my_scanner = new Scanner(System.in);
System.out.println("Required packages have been imported");
System.out.println("A scanner object has been defined ");
System.out.println("Enter the first number :");
my_low = my_scanner.nextInt();
System.out.println("Enter the limit :");
my_high = my_scanner.nextInt();
System.out.println("The Armstrong numbers are :");
for(i = my_low + 1; i < my_high; ++i) {
if (IsArmstrong (i))
System.out.print(i + " ");
}
}
public static boolean IsArmstrong(int i) {
int check, my_rem, my_sum;
my_sum = 0;
check = i;
while(check != 0) {
my_rem = check % 10;
my_sum = my_sum + (my_rem * my_rem * my_rem);
check = check / 10;
}
if(my_sum == i){
return true;
}
return false;
}
}
出力
Required packages have been imported A scanner object has been defined Enter the first number : 1 Enter the limit : 500 The Armstrong numbers are : 153 370 371 407
例2: 値を事前に定義する場合
ここでは、整数値があらかじめ定義されており、その値にアクセスしてコンソールに表示します。
public class ArmstrongNumbers {
public static void main(String[] args) {
int my_low, my_high, i;
my_low = 1;
my_high = 500;
System.out.println("The starting and ending numbers are defined as " + my_low + " and " + my_high);
System.out.println("The Armstrong numbers are :");
for(i = my_low + 1; i < my_high; ++i) {
if (IsArmstrong (i))
System.out.print(i + " ");
}
}
public static boolean IsArmstrong (int i) {
int check, my_rem, my_sum;
my_sum = 0;
check = i;
while(check != 0) {
my_rem = check % 10;
my_sum = my_sum + (my_rem * my_rem * my_rem);
check = check / 10;
}
if(my_sum == i){
return true;
}
return false;
}
}
出力
The starting and ending numbers are defined as 1 and 500 The Armstrong numbers are : 153 370 371 407
まとめ
このプログラムでは、剰余演算子(%)と除算(/)を組み合わせることで、数値の各桁を順番に取り出しています。判定ロジックを IsArmstrong 関数として独立させることで、コードの再利用性と可読性が向上します。my_low と my_high の値を変更すれば、任意の区間のアームストロング数を簡単に求めることができます。
-
【C言語】再帰関数を使って2つの整数の最大公約数(GCD)を求める方法
問題 C言語において再帰関数を使用し、与えられた2つの整数の最大公約数(GCD:Greatest Common Divisor)を求めます。 解決策 再帰関数を用いて2つの整数の最大公約数を求めるには、「ユークリッドの互除法」が利用できます。これは「2つの数のGCDは、大きい方の数を小さい方の数で割った余りと、小さい方の数とのGCDに等しい」という性質を応用した手法です。この計算を余りが0になるまで再帰的に繰り返すことで、GCDを効率よく求めることができます。 アルゴリズム 再帰関数を使って2つの整数のGCDを求めるためのアルゴリズムは、以下の手順に従います。 ステップ1 − 再帰関数を
-
【C言語】forループを使って1〜Nまでの素数をすべて表示するプログラム
問題 実行時にユーザーが入力した値nに対して、1からnの間に存在するすべての素数を表示するC言語プログラムを作成しましょう。 解決策 ここでは、forループを使用して、実行時にユーザーから与えられた値nまでの範囲内にある素数をすべて検出・表示する方法を解説します。なお、素数とは、1とその数自身以外に約数を持たない、1より大きい自然数のことです。具体的には、2、3、5、7、11、13などが該当します。 アルゴリズム 以下は、実行時にユーザーが入力した値nまでの素数をすべて表示するためのアルゴリズムです。 ステップ1 − nの値を入力として読み込む ステップ2 − カウンタ変数countを0で初