Java инвертирует значение int без использования массива - PullRequest
33 голосов
/ 27 сентября 2010

Может кто-нибудь объяснить мне, как обратить целое число без использования массива или строки.Я получил этот код из сети, но не совсем понимаю, почему + введите% 10 и снова разделите.

while (input != 0) {
    reversedNum = reversedNum * 10 + input % 10;
    input = input / 10;   
}

И как использовать этот пример кода для обращения только нечетного числа.Пример Я получил этот вход 12345, затем он обратит нечетное число к выходу 531.

Ответы [ 30 ]

1 голос
/ 21 июля 2014
public static int reverse(int x) {
    boolean negetive = false;
    if (x < 0) {
        x = Math.abs(x);
        negative = true;
    }

    int y = 0, i = 0;
    while (x > 0) {
        if (i > 0) {
            y *= 10;
        }

        y += x % 10;
        x = x / 10;
        i++;
    }
    return negative ? -y : y;
}
1 голос
/ 29 мая 2019

Вот полное решение (возвращает 0, если число переполнено):

public int reverse(int x) {
    boolean flag = false;

    // Helpful to check if int is within range of "int"
    long num = x;

    // if the number is negative then turn the flag on.
    if(x < 0) {
        flag = true;
        num = 0 - num;
    }

    // used for the result.
    long result = 0;

    // continue dividing till number is greater than 0
    while(num > 0) {
        result = result*10 + num%10;
        num= num/10;
    }

    if(flag) {
        result = 0 - result;
    }

    if(result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
        return 0;
    }
    return (int) result;
}
0 голосов
/ 03 июля 2013
int convert (int n)
{
        long val = 0;

        if(n==0)
            return 0;

        for(int i = 1; n > exponent(10,  (i-1)); i++)
        {
            int mod = n%( (exponent(10, i))) ;
            int index = mod / (exponent(10, i-1));

            val *= 10;
            val += index;
        }

        if (val < Integer.MIN_VALUE || val > Integer.MAX_VALUE) 
        {
            throw new IllegalArgumentException
                (val + " cannot be cast to int without changing its value.");
        }
        return (int) val;

    }


static int exponent(int m, int n)
    {
        if(n < 0) 
            return 0;
        if(0 == n) 
            return 1;

        return (m * exponent(m, n-1));

    }
0 голосов
/ 11 октября 2014

Хорошо, что вы написали свой оригинальный код. У меня есть другой способ закодировать эту концепцию обращения целого числа. Я собираюсь разрешить до 10 цифр. Однако я собираюсь сделать предположение, что пользователь не введет ноль.

if((inputNum <= 999999999)&&(inputNum > 0 ))
{
   System.out.print("Your number reversed is: ");

   do
   {
      endInt = inputNum % 10; //to get the last digit of the number
      inputNum /= 10;
      system.out.print(endInt);
   }
   While(inputNum != 0);
 System.out.println("");

}
 else
   System.out.println("You used an incorrect number of integers.\n");

System.out.println("Program end");
0 голосов
/ 17 июня 2018
public int getReverseNumber(int number)
{
    int reminder = 0, result = 0;
    while (number !=0)
    {
        if (number >= 10 || number <= -10)
        {
            reminder = number % 10;
            result = result + reminder;
            result = result * 10;
            number = number / 10;
        }
        else
        {
            result = result + number;
            number /= 10;
        }
    }
    return result;

}

// Приведенный выше код будет работать и для отрицательных чисел

0 голосов
/ 15 мая 2018

Если вы хотите обратить любое число, например 1234, и хотите изменить это число на 4321. Прежде всего, инициализируйте 3 переменные int org;int reverse = 0;и int напоминание;тогда поставь свою логику как

    Scanner input = new Scanner (System.in);
    System.out.println("Enter number to reverse ");
    int org = input.nextInt();
    int getReminder;
    int r = 0;
    int count = 0;

    while (org !=0){
        getReminder = org%10;
         r = 10 * r + getReminder;
         org = org/10;



    }
        System.out.println(r);

    }
0 голосов
/ 01 июня 2018

Вы можете использовать рекурсию для решения этой проблемы.

сначала получите длину целого числа, используя следующую рекурсивную функцию.

int Length(int num,int count){
    if(num==0){
        return count;
    }
    else{
        count++;
        return Lenght(num/10,count);
    }
}

и затем вы можете просто умножить остаток числа на 10 ^ (длина целого числа - 1).

int ReturnReverse(int num,int Length,int reverse){
    if(Length!=0){
        reverse = reverse + ((num%10) * (int)(Math.pow(10,Length-1)));
        return ReturnReverse(num/10,Length-1,reverse);
    }
    return reverse;
}

Весь исходный код:

import java.util.Scanner;

public class ReverseNumbers {

    int Length(int num, int count) {
        if (num == 0) {
            return count;
        } else {
            return Length(num / 10, count + 1);
        }
    }

    int ReturnReverse(int num, int Length, int reverse) {
        if (Length != 0) {
            reverse = reverse + ((num % 10) * (int) (Math.pow(10, Length - 1)));
            return ReturnReverse(num / 10, Length - 1, reverse);
        }
        return reverse;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int N = scanner.nextInt();

        ReverseNumbers reverseNumbers = new ReverseNumbers();
        reverseNumbers.ReturnReverse(N, reverseNumbers.Length(N, 0), reverseNumbers.ReturnReverse(N, reverseNumbers.Length(N, 0), 0));

        scanner.close();
    }
}
0 голосов
/ 13 ноября 2015
public static void reverse(int number) {
    while (number != 0) {
        int remainder = number % 10;
        System.out.print(remainder);
        number = number / 10;
    }

    System.out.println();
}

Для этого нужно убрать последнюю цифру (с точностью до десятых) и добавить ее вперед, а затем разделить число на 10, удалив последнюю цифру.

0 голосов
/ 09 марта 2015

Я использовал String, и я сначала преобразовал int в String. Затем я использовал обратный метод. Я нашел обратное число в String, а затем преобразовал строку обратно в int. Вот программа.

import java.util.*;

public class Panathinaikos {
    public static void my_try()
    {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter the number you want to be reversed");
        int number = input.nextInt();
        String sReverse = Integer.toString(number);
        String reverse = new StringBuffer(sReverse).reverse().toString();
        int Reversed = Integer.parseInt(reverse);
        System.out.print("The number " + number+ " reversed is " + Reversed);
    }
}
0 голосов
/ 16 марта 2017
while (input != 0) {
  reversedNum = reversedNum * 10 + input % 10;
  input = input / 10;
}

пусть число равно 168,
+ input% 10 возвращает последнюю цифру как напоминание, т.е. 8, но в следующий раз она должна вернуть 6, следовательно, число должно быть уменьшено до 16 с 168, так как делим 168 на 10приводит к 16 вместо 16,8, так как переменная ввода должна быть целочисленного типа в вышеуказанной программе.

...