Javaでアームストロング数を判定する方法|サンプルコード付きで解説
本記事では、与えられた数値がアームストロング数(Armstrong number)であるかどうかを判定するJavaプログラムの作成方法を解説します。ユーザーからの入力を受け付けるパターンと、値をあらかじめ定義しておくパターンの2種類のサンプルコードを紹介します。
アームストロング数とは?
アームストロング数とは、各桁の数字を3乗した値の合計が、元の数値そのものと等しくなる数のことです。より一般的には、n桁の整数について、すべての桁を取り出してそれぞれn乗し、それらを合計した結果が元の数と一致するとき、その数を「位数nのアームストロング数」と呼びます。
これを数式で表すと次のようになります。
abcd… = an + bn + cn + dn + …
3桁のアームストロング数の場合は、各桁の3乗の総和がその数自身と一致します。代表的な例を見てみましょう。
153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153
371 = 3³ + 7³ + 1³ = 27 + 343 + 1 = 371
なお、3桁のアームストロング数は「153・370・371・407」の4つのみ存在することが知られています。
実行イメージ
今回作成するプログラムの入力と出力の流れは次のとおりです。
入力
数値を入力してください : 407
出力
407 はアームストロング数です
アルゴリズム
アームストロング数の判定は、次の手順で行います。
手順1 − 開始する 手順2 − my_input、my_temp、my_remainder、my_result の4つの整数型変数を宣言する 手順3 − ユーザーから値を読み込む、またはあらかじめ値を定義する 手順4 − %(剰余)、/(除算)、*(乗算)の各演算子を使ってwhileループを実行し、判定を行う 手順5 − 判定対象の数値を10で割り、余りを求める 手順6 − 余りを3乗して合計値に加算し、その結果を新しい合計値とする 手順7 − 判定対象の数値を10で割り、その商を新しい判定対象の値とする 手順8 − 最終的な合計値が入力値と一致すればアームストロング数、一致しなければアームストロング数ではない 手順9 − 結果を表示する 手順10 − 終了する
例1:ユーザーから入力を受け取る場合
ここでは、Scannerクラスを使ってユーザーが入力した数値に対して判定を行います。オンラインのコンパイル環境でもそのまま試すことができます。
import java.util.Scanner;
public class IsArmstrong {
public static void main(String[] args) {
int my_input, my_temp, my_remainder, my_result;
my_result = 0;
System.out.println("必要なパッケージをインポートしました");
Scanner my_scanner = new Scanner(System.in);
System.out.println("リーダーオブジェクトを定義しました ");
System.out.print("数値を入力してください : ");
my_input = my_scanner.nextInt();
my_temp = my_input;
while (my_temp != 0){
my_remainder = my_temp % 10;
my_result += Math.pow(my_remainder, 3);
my_temp /= 10;
}
if(my_result == my_input)
System.out.println(my_input + " はアームストロング数です");
else
System.out.println(my_input + " はアームストロング数ではありません");
}
}
出力
必要なパッケージをインポートしました リーダーオブジェクトを定義しました 数値を入力してください : 407 407 はアームストロング数です
例2:値をあらかじめ定義しておく場合
続いて、整数値をプログラム内で事前に定義し、その値に対して判定結果をコンソールへ出力するパターンです。
public class IsArmstrong {
public static void main(String[] args) {
int my_input, my_temp, my_remainder, my_result;
my_input = 407;
my_result = 0;
System.out.println("判定する数値 : " + my_input);
my_temp = my_input;
while (my_temp != 0){
my_remainder = my_temp % 10;
my_result += Math.pow(my_remainder, 3);
my_temp /= 10;
}
if(my_result == my_input)
System.out.println(my_input + " はアームストロング数です");
else
System.out.println(my_input + " はアームストロング数ではありません");
}
}
出力
判定する数値 : 407 407 はアームストロング数です
まとめ
このように、剰余演算(%)で一の位の数字を取り出し、10での除算(/)によって桁をずらしていく処理を繰り返すことで、各桁の3乗の合計を簡単に求められます。最後に合計値が元の数と一致するかを比較すれば、判定は完了です。プログラミング学習の定番問題でもあるため、153や370など別の数値を入力して、ぜひ自分でも動作を確認してみてください。
-
Javaで回文を判定するプログラムの書き方【数値・文字列の実例付き】
回文(パリンドローム)とは、逆から読んでも同じになる文字列や数値のことです。たとえば、121、313、525 といった数値や、「aba」「wow」のような文字列が回文に該当します。この記事では、Javaを使って回文を判定する方法を、数値の場合と文字列の場合の2つのパターンに分けて、サンプルコードと実行結果とともにわかりやすく解説します。回文数をチェックする方法数値が回文かどうかを判定するには、元の数値を1桁ずつ取り出して逆順に組み立て直し、元の値と比較します。具体的には、剰余演算(%10)で末尾の桁を取り出し、それを結果変数に10倍しながら加算していくことで反転した数値を作れます。サンプルコー
-
Pythonでアームストロング数を判定するプログラムの書き方
この記事では、与えられた整数が「アームストロング数(Armstrong number)」であるかどうかを判定するための考え方と、Pythonによる具体的な実装方法を解説します。 問題の定義 整数 n が与えられたとき、その整数がアームストロング数であるかどうかを判定することを目標とします。 アームストロング数とは? n 桁の正の整数 abcd… が次の条件を満たすとき、この数は「n 次(オーダー n)のアームストロング数」と呼ばれます。 abcd... = a^n + b^n + c^n + d^n + … つまり、各桁の数字を「桁数乗」した値の総和が、元の数と一致するかを確認す