【Java】指定した2つの数値間のアームストロング数を表示するプログラムの作成方法
はじめに
本記事では、Javaを使って指定した2つの数値の間に存在するアームストロング数を表示する方法を詳しく解説します。アームストロング数とは、各桁の数字をそれぞれ3乗して合計した値が、元の数そのものと一致する数のことです。
より一般的に言えば、ある整数の各桁を個別に取り出して3乗し、それらをすべて合計した結果が元の数と等しいとき、その整数は「アームストロング数」と呼ばれます。数式で表すと次のような関係が成り立ちます。
abcd... = a3 + b3 + c3 + d3 + ...
アームストロング数の具体例
3桁のアームストロング数の場合、各桁の立方数の合計がその数自体と一致します。たとえば、153はアームストロング数です。
153 = 1³ + 5³ + 3³ = 1 + 125 + 27
同様に、370もアームストロング数です。
370 = 3³ + 7³ + 0³ = 27 + 343 + 0
入力例と出力例
入力として次の2つの数値を与えた場合を考えます。
1 ~ 500
このとき期待される出力は次のとおりです。
1から500の間のアームストロング数:1、153、370、371、407
アルゴリズム
手順1 - 処理を開始する 手順2 - 必要な整数変数(下限値・上限値・チェック用・合計用・ループカウンタ)を宣言する 手順3 - ユーザーに2つの整数値の入力を求める、または値をあらかじめ定義する 手順4 - 入力値を読み込む 手順5 - forループを使い、%(剰余)・/(除算)・*(乗算)演算子でアームストロング数を判定する 手順6 - チェック用変数を10で割り、余り(最下位の桁)を取得する 手順7 - 余りを3回掛けた値を合計に加算し、それを新しい合計値とする 手順8 - チェック用変数を10で割り、その商を新しいチェック用変数とする 手順9 - 結果を表示する 手順10 - 処理を終了する
例1:ユーザー入力による実装
この例では、Scannerクラスを使ってユーザーから下限値と上限値を入力してもらい、その範囲内のアームストロング数をすべて出力します。オンラインコンパイラなどで実際に動作を確認することも可能です。
import java.util.Scanner;
public class ArmstrongNumbers {
public static void main(String args[]){
int my_low, my_high, check, my_rem, my_sum, 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; i<my_high; i++){
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){
System.out.println(i);
}
}
}
}出力
Required packages have been imported A scanner object has been defined Enter the first number : 1 Enter the limit : 500 The Armstrong numbers are : 1 153 370 371 407
例2:値を事前に定義する実装
こちらの例では、下限値と上限値があらかじめコード内で定義されており、その値を使って計算を行い、結果をコンソールに出力します。
public class ArmstrongNumbers {
public static void main(String args[]){
int my_low, my_high, check, my_rem, my_sum, i;
my_low = 1;
my_high = 500;
System.out.printf("The first number is %d and the limit is %d ", my_low, my_high);
System.out.println("\nThe Armstrong numbers are :");
for (i = my_low; i<my_high; i++){
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){
System.out.println(i);
}
}
}
}出力
The first number is 1 and the limit is 500 The Armstrong numbers are : 1 153 370 371 407
コードのポイント
whileループの中では、まずcheck % 10によって最下位の桁(1の位)を取り出し、その値を3乗してmy_sumに加算します。続いてcheck / 10による整数除算で、処理済みの桁を取り除きます。これをすべての桁に対して繰り返し、最終的なmy_sumが元の数iと一致した場合にのみ、その数をアームストロング数として出力します。この仕組みを理解すれば、桁数が異なる場合や他の基数での応用にも簡単に拡張できます。
-
Javaで数値がフィボナッチ数かどうかを判定する方法|完全平方数を使ったチェックプログラム
ある整数がフィボナッチ数(0, 1, 1, 2, 3, 5, 8, 13, 21…と続く数列に含まれる数)であるかどうかは、実際に数列を生成しなくても、数学的な性質を利用することで効率的に判定できます。 判定の原理:完全平方数の性質 有名な定理によると、n がフィボナッチ数であるのは、「5n² + 4」または「5n² − 4」のどちらか一方が完全平方数になる場合、かつその場合に限ることが証明されています。これを利用すると、O(1) に近い計算量でフィボナッチ数かどうかをチェックできます。 フィボナッチ数判定のJavaプログラム 以下が、与えられた数値がフィボナッチ数かどうかをチェックするJav
-
Pythonでアームストロング数を判定するプログラムの書き方
この記事では、与えられた整数が「アームストロング数(Armstrong number)」であるかどうかを判定するための考え方と、Pythonによる具体的な実装方法を解説します。 問題の定義 整数 n が与えられたとき、その整数がアームストロング数であるかどうかを判定することを目標とします。 アームストロング数とは? n 桁の正の整数 abcd… が次の条件を満たすとき、この数は「n 次(オーダー n)のアームストロング数」と呼ばれます。 abcd... = a^n + b^n + c^n + d^n + … つまり、各桁の数字を「桁数乗」した値の総和が、元の数と一致するかを確認す