Как поменять местами int в java?

Вопрос: Мне нужно поменять местами int. Например, если я вызову метод swapDigitPairs (482596), он вернет мне 845269. 9 и 6 меняются местами, как и 2 и 5, и 4 и 8. Если число содержит нечетное число цифр, оставьте левую цифру в исходном месте. Например, вызов swapDigitPairs (1234567) вернет 1325476. Я не могу разрешить использование строки,

Вопрос:

Мне нужно поменять местами 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; } Лучший ответ:

Здесь решение (проверено):

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

Если у вас есть abcdef

Тогда ((a+b)*10000 + (c+d)*100 + (e+f)) * 11 — abcdef = badcfe

Ответ №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

Вот код с некоторыми тестовыми примерами

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

Оцените статью
Добавить комментарий