1. 概要

このチュートリアルでは、Javaの数学的アプローチを使用して数値を逆にする方法を説明します。 最初に、これを行うために必要な数学演算を確認し、次にこれを実装する3つの異なる方法を実行します。

2. ソリューションアプローチ

まず、例を見て、何が起こるかを正確に見てみましょう。 たとえば、番号1234を4321にします。 これは、次のアプローチで実現できます。

  1. 番号の最後の桁を取得します
    • モジュラスを適用して最後の桁を取得できます
    • 最初の反復– 1234%10 = 4
    • 2回目の反復– 123%10 = 3
  2. 逆の数に10を掛けて、前のステップで見つかった桁を追加します
    • 1回目の反復– 0 * 10 + 4 = 4(最初に逆数がないため、1回目の反復で0を掛けます)
    • 2回目の反復– 4 * 10 + 3 = 43
  3. 元の数値を10で割り、手順1から繰り返して、数値が0になるまで続けます。
    • 最初の反復– 1234/10 = 123
    • 2回目の反復– 123/10 = 12

3. 数学的実装

上記の数学演算をコードに変換したいと思います。 これは、 while ループ、 for ループ、または再帰の3つの異なる方法で可能です。

以下のアプローチは、逆にされる数の絶対値を使用し、元の数が負の場合は逆にされた数に-1を掛けることによって、負の値にも対応します。

3.1. whileループ

while ループは、上記の数学演算を変換する最も明確な方法であるため、リストの最初にあります。

int reversedNumber = 0;
int numberToReverse = Math.abs(number);

while (numberToReverse > 0) {
    int mod = numberToReverse % 10;
    reversedNumber = reversedNumber * 10 + mod;
    numberToReverse /= 10;
}

return number < 0 ? reversedNumber * -1 : reversedNumber;

3.2. forループ

for ループを使用すると、ロジックは以前と同じになります。 for ループの初期化ステートメントをスキップし、終了条件で逆になっている番号を使用します。

int reversedNumber = 0;
int numberToReverse = Math.abs(number);

for (; numberToReverse > 0; numberToReverse /= 10) {
    int mod = numberToReverse % 10;
    reversedNumber = reversedNumber * 10 + mod;
}

return number < 0 ? reversedNumber * -1 : reversedNumber;

3.3. 再帰

recursion の場合、逆の数を返すrecursiveメソッドを呼び出すラッパーメソッドを使用できます。

int reverseNumberRecWrapper(int number) {
    int output = reverseNumberRec(Math.abs(number), 0);
    return number < 0 ? output * -1 : output;
}

再帰メソッドは、前の例と同じ方法で数学演算を実装します。

int reverseNumberRec(int numberToReverse, int recursiveReversedNumber) {

    if (numberToReverse > 0) {
        int mod = numberToReverse % 10;
        recursiveReversedNumber = recursiveReversedNumber * 10 + mod;
        numberToReverse /= 10;
        return reverseNumberRec(numberToReverse, recursiveReversedNumber);
    }

    return recursiveReversedNumber;
}

recursiveメソッドは、各反復で現在反転されている数値を返し、反転される数値は反復ごとに短縮されます。 これは、反転する数値が0になるまで発生します。0になると、完全に反転した数値が返されます。

4. 結論

この記事では、 while ループ、 for ループ、および再帰を使用して、数値を逆にする3つの異なる実装について説明しました。

いつものように、例のソースコードはGitHubから入手できます。