如何在java中交换int的位置?

时间:2013-03-09 17:27:30

标签: java algorithm

我需要交换int的位置。例如,如果我调用方法swapDigitPairs(482596),它将返回845269. 9和6交换,2和5以及4和8交换。

如果数字包含奇数位数,请将最左边的数字保留在原始位置。例如,swapDigitPairs(1234567)的调用将返回1325476.我不打算使用字符串解决,我应该使用while循环来解决它。我不应该使用任何阵列。

以下是我到目前为止所做的工作。但我被困在交换位置,我知道我需要乘以地方(如第十,千等)取决于数量。但我被困在这一部分。我所做的就是逐个检索数字。

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;
}

5 个答案:

答案 0 :(得分: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;
}

这里的关键点是:

  • 循环消耗数字右侧的数字,因此奇/偶处理区别得到优雅处理
  • 终止条件是剩余至少两位数
  • 循环逻辑每次迭代处理两位数
  • 使用余数运算符%和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

答案 1 :(得分:2)

如果您有abcdef

然后((a+b)*10000 + (c+d)*100 + (e+f)) * 11 - abcdef = badcfe

答案 2 :(得分: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));

答案 3 :(得分: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;
    }

}

答案 4 :(得分: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 );
    }
}

它不会验证输入是否为范围内的正整数。我将其转换为 String 以使其在交换后在左侧打印零。

Enter a whole number : 342325400
Swapped Number is : 004523243