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

Javaで数値を反転して加算し回文を求めるアルゴリズムの実装方法

整数が1つ与えられ、その目的は数値の桁を反転したものを元の数に加算し、結果が回文(palindrome)になるかどうかを確認することです。回文でない場合は、更新された数値に対して同じ処理を繰り返します。この処理の打ち切り条件は、1000回の反復、およびlong型の最大値(Long.MAX_VALUE)を超えた時点です。

実行例

入力 − 1678

出力 − 与えられた入力 1678 の回文は 293392

説明 − 入力された数値をまず反転し、元の数に加算します。その結果が回文かどうかを判定し、回文でなければ更新された数値に対して同じ処理を繰り返します。処理の打ち切り条件は、1000回の反復、または long型の最大値(Long.MAX_VALUE)を超えた時点です。

入力 − 202021038

出力 − 与えられた入力 202021038 の回文は 1453553541

説明 − 入力された数値をまず反転し、元の数に加算します。その結果が回文かどうかを判定し、回文でなければ更新された数値に対して同じ処理を繰り返します。処理の打ち切り条件は、1000回の反復、または long型の最大値(Long.MAX_VALUE)を超えた時点です。

プログラムで使用しているアプローチ

  • main関数内

    • 入力された数値をメソッド calculateReverseandAdd(input) に渡します。

  • calculateReverseandAdd メソッド内

    • 新しい変数 rev_number を宣言します。

    • number <= max を条件とするループを反復します。

    • ループ内では、数値を reverseNumber() メソッドに渡すことで反転した数を取得します。

    • 反転した数を元の入力数値に加算します。

    • 得られた数値を checkPalindrome() メソッドに渡して回文かどうかを判定し、回文であればその数値を出力として表示します。

    • 回文でない場合は、得られた数値に対して同じ処理を回文が得られるまで繰り返します。結果の数値が long型の最大値を超えた場合は、指定された数値に対して範囲内に回文が存在しないことを意味します。

コード例

import java.util.*;
public class ReverseAdd{
    static final long max = Long.MAX_VALUE;
    static long reverseNumber(long number){
        long rev_number = 0;
        while (number > 0){
            rev_number = rev_number * 10 + number % 10;
            number = number / 10;
        }
        return rev_number;
    }
    static boolean checkPalindrome(long number){
        return (reverseNumber(number) == number);
    }
    static void calculateReverseandAdd(long number){
        long rev_number = 0;
        System.out.println("Palindrome of the given input " + number);
        while (number <= max){
            rev_number = reverseNumber(number);
            number = number + rev_number;
            if (checkPalindrome(number)){
                System.out.println(number);
                break;
            }
            else if (number > max){
                System.out.println("No possible palindromes for the input");
            }
        }
    }
    public static void main(String[] args){
        calculateReverseandAdd(1678);
        calculateReverseandAdd(2961);
        calculateReverseandAdd(202021038);
    }
}

出力結果

上記のコードを実行すると、以下の出力が生成されます。

Palindrome of the given input 1678
293392
Palindrome of the given input 2961
69696
Palindrome of the given input 202021038
1453553541
  1. Javaでカウンタープログラムを実装する方法をわかりやすく解説

    この記事では、JavaのSwingを使ってシンプルなカウンター(数を数える)アプリケーションを実装する方法を解説します。このプログラムでは、JLabelでカウント用のラベルを表示し、JTextFieldで現在のカウント値を保持し、JButtonで「追加(Add)」「削除(Remove)」「リセット(Reset)」の3つのボタンを作成します。 「Add」ボタンをクリックするとJTextField内のカウントが1ずつ増加し、「Remove」ボタンをクリックすると1ずつ減少します。さらに「Reset」ボタンをクリックすると、カウントは0にリセットされます。 実装例 import java.awt.*

  2. Javaと.NETの違いを徹底比較!言語・プラットフォーム・ランタイムの違いをわかりやすく解説

    Javaは、Sun Microsystems(現Oracle)が開発し、1995年にリリースされた高水準プログラミング言語です。Windows、Mac OS、各種UNIXなど、さまざまなプラットフォーム上で動作できる点が大きな特徴です。 一方、.NETフレームワークはMicrosoftが開発したソフトウェアフレームワークで、Microsoft Windows OS上で動作します。ユーザーインターフェース、データアクセス、データベース接続、暗号化、Webアプリケーション開発など、幅広い機能を提供します。 対応言語の違い Javaでは基本的にJava言語のみを使用します。 .NETはVB.NET、