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

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など別の数値を入力して、ぜひ自分でも動作を確認してみてください。

  1. Javaで回文を判定するプログラムの書き方【数値・文字列の実例付き】

    回文(パリンドローム)とは、逆から読んでも同じになる文字列や数値のことです。たとえば、121、313、525 といった数値や、「aba」「wow」のような文字列が回文に該当します。この記事では、Javaを使って回文を判定する方法を、数値の場合と文字列の場合の2つのパターンに分けて、サンプルコードと実行結果とともにわかりやすく解説します。回文数をチェックする方法数値が回文かどうかを判定するには、元の数値を1桁ずつ取り出して逆順に組み立て直し、元の値と比較します。具体的には、剰余演算(%10)で末尾の桁を取り出し、それを結果変数に10倍しながら加算していくことで反転した数値を作れます。サンプルコー

  2. Pythonでアームストロング数を判定するプログラムの書き方

    この記事では、与えられた整数が「アームストロング数(Armstrong number)」であるかどうかを判定するための考え方と、Pythonによる具体的な実装方法を解説します。 問題の定義 整数 n が与えられたとき、その整数がアームストロング数であるかどうかを判定することを目標とします。 アームストロング数とは? n 桁の正の整数 abcd… が次の条件を満たすとき、この数は「n 次(オーダー n)のアームストロング数」と呼ばれます。 abcd... = a^n + b^n + c^n + d^n + … つまり、各桁の数字を「桁数乗」した値の総和が、元の数と一致するかを確認す