2

intの場所を入れ替える必要があります。たとえば、メソッドswapDigitPairs(482596)を呼び出すと、845269が返されます。2と5、および4と8と同様に、9と6が交換されます。

数字に奇数の桁が含まれている場合は、左端の桁を元の場所に残します。たとえば、swapDigitPairs(1234567)を呼び出すと1325476が返されます。文字列を使用して解決することは想定されていないため、whileループを使用して解決する必要があります。配列を使用することは想定されていません。

以下は私がこれまでに行ったことです。でもスワッピングの位置で立ち往生していて、数に応じて場所(10、1000など)を掛ける必要があるのはわかっていますが、この部分で立ち往生しています。私がやったことは、番号を1つずつ取得することです。

public static int swapDigitPairs(int number) {

    while(number!=0) {
        int firstDigit = number%10;

        for(int i =10;i<=;i*=10) {
            int secondDigit= firstDigit*i;
        }

        int leftOverDigit = number/10;

        number=leftOverDigit;

    }
    return number;
}
4

5 に答える 5

6

これが解決策です(テスト済み):

public static int swapDigitPairs(int number) {
    int result = 0;
    int place = 1;
    while (number > 9) {
        result += place * 10 * (number % 10);
        number /= 10;
        result += place * (number % 10);
        number /= 10;
        place *= 100;
    }
    return result + place * number;
}

ここでの重要なポイントは次のとおりです。

  • ループは数値の右側からの数字を消費するため、奇数/偶数の処理の区別は適切に処理されます
  • 終了条件は、少なくとも2桁が残っていることです。
  • ループロジックは、反復ごとに2桁を処理します
  • 最後の桁を生成するには、%10(つまり)で剰余演算子を使用しますnumber % 10
  • 10で整数を除算すると、最後の桁が数値で切り捨てられます
  • 変数の最後の桁を保持する必要はありません-コードが乱雑になるだけです

ここにいくつかのテストといくつかのエッジケースがあります:

public static void main(String[] args) throws Exception {
    System.out.println(swapDigitPairs(482596));
    System.out.println(swapDigitPairs(1234567));
    System.out.println(swapDigitPairs(12));
    System.out.println(swapDigitPairs(1));
    System.out.println(swapDigitPairs(0));
}

出力:

845269
1325476
21
1
0
于 2013-03-09T17:56:18.057 に答える
2

あなたが持っている場合abcdef

それで((a+b)*10000 + (c+d)*100 + (e+f)) * 11 - abcdef = badcfe

于 2013-03-09T17:40:16.423 に答える
2

簡単な解決策は

    int i1 = 482596;
    char[] a = String.valueOf(i1).toCharArray();
    for (int i = 0; i < a.length - 1; i += 2) {
        char tmp = a[i];
        a[i] = a[i + 1];
        a[i + 1] = tmp;
    }
    int i2 = Integer.parseInt(new String(a));
于 2013-03-09T17:44:42.970 に答える
1

これがいくつかのテストケースのコードです

public class ReverseNumberDigit {

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(reverseNumber(123456789));
        System.out.println(reverseNumber(12345678));
        System.out.println(reverseNumber(1234567));
        System.out.println(reverseNumber(123456));
        System.out.println(reverseNumber(12345));
        System.out.println(reverseNumber(1234));
        System.out.println(reverseNumber(123));
        System.out.println(reverseNumber(12));
        System.out.println(reverseNumber(1));

    }

    private static int reverseNumber(int orinalNumber) {
        int reverseNumber = 0;
        int x = 1;

        while(orinalNumber > 9){
        int lastNumber = orinalNumber %  10; 
        orinalNumber = orinalNumber / 10;
        int secondNumber = orinalNumber %  10;
        orinalNumber = orinalNumber / 10;
        reverseNumber = reverseNumber + (lastNumber * x * 10) + (secondNumber * x);
        x = x * 100;
        }
        if(orinalNumber > 0){
            reverseNumber = reverseNumber + orinalNumber * x;
        }
        return reverseNumber;
    }

}
于 2013-03-09T18:34:32.793 に答える
0

私はJavaを初めて使用しますが、これは別の解決策になる可能性があります。

import java.util.Scanner;

public class DigitsPlaceSwap {

    public static void main(String[] args) {
        DigitsPlaceSwap demo = new DigitsPlaceSwap();

        System.out.print("Enter a whole number : ");
        Scanner stdin = new Scanner(System.in);
        int number = stdin.nextInt();
        
        demo.switchDigits( number );
    }

    public void switchDigits( int number ) {
        int getDigits = 0;
        int numberOfDigits = String.valueOf(number).length();
        String result = "";

        for( int i = 1; i <= numberOfDigits; i++) {
            getDigits = ( ( number % (int) Math.pow( 10, i ) ) / (int) Math.pow( 10, i - 1 ) );
            result += Integer.toString( getDigits );
        }

        System.out.println( "Swapped Number is : " + result );
    }
}

範囲内の正の整数であるかどうかにかかわらず、入力は検証されません。スワップ後に左側にゼロを出力するように文字列に変換します。

Enter a whole number : 342325400
Swapped Number is : 004523243
于 2021-07-27T17:42:59.337 に答える