Подтвердить что ты не робот

Java обращает значение int без использования массива

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

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

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

4b9b3361

Ответ 1

Я не понимаю, что вы нечетное число. Способ работы этого кода (это не специфический для Java алгоритм) Например. input = 2345 первый раз в цикле while rev = 5 вход = 234 второй раз rev = 5 * 10 + 4 = 54 вход = 23 третий раз rev = 54 * 10 + 3 вход = 2 четвертый раз rev = 543 * 10 + 2 input = 0

Таким образом, обратное число равно 5432. Если вам просто нужны только нечетные числа в обратном числе, тогда. Код:

while (input != 0) {    
    last_digit = input % 10;
    if (last_digit % 2 != 0) {     
        reversedNum = reversedNum * 10 + last_digit;

    }
    input = input / 10; 
}

Ответ 2

Java обратное значение int - Принципы

  • Modding (%) вход int на 10 будет извлекать самую правую цифру. пример: (1234% 10) = 4

  • Умножение целого числа на 10 будет "нажимать налево", показывая нуль справа от этого числа, например: (5 * 10) = 50

  • Разделение целого числа на 10 приведет к удалению самой правой цифры. (75/10) = 7

Java обратное значение int - Pseudocode:

а. Извлеките самую правую цифру вашего номера входа. (1234% 10) = 4

б. Возьмите эту цифру (4) и добавьте ее в новый reverseedNum.

с. Multiply reversedNum на 10 (4 * 10) = 40, это предоставляет нуль справа от вашего (4).

д. Разделите вход на 10, (удаляя самую правую цифру). (1234/10) = 123

е. Повторите на шаге a с 123

Java обратное значение int - Рабочий код

public int reverseInt(int input) {
    long reversedNum = 0;
    long input_long = input;

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

    if (reversedNum > Integer.MAX_VALUE || reversedNum < Integer.MIN_VALUE) {
        throw new IllegalArgumentException();
    }
    return (int) reversedNum;
}

Вы никогда не сделаете ничего подобного в реальном мире работы. Тем не менее, процесс, с помощью которого вы используете для его решения без помощи, - это то, что отделяет людей, которые могут решать проблемы от тех, кто хочет, но не может, если они не ложки, подаваемые хорошими людьми на blogoblags.

Ответ 3

Просто вы можете использовать этот

public int getReverseInt(int value) {
    int resultNumber = 0;
    for (int i = value; i !=0; i /= 10) {
        resultNumber = resultNumber * 10 + i % 10;
    }
    return resultNumber;        
}

Вы можете использовать этот метод с заданным значением, которое вы хотите восстановить.

Ответ 4

while (num != 0) {
    rev = rev * 10 + num % 10;
    num /= 10;
}

Это решение, которое я использовал для этой проблемы, и оно отлично работает. Больше деталей:

num % 10

Это утверждение даст вам последнюю цифру от исходного номера.

num /= 10

Это утверждение удалит последнюю цифру из исходного числа, и, следовательно, мы уверены, что цикл while прекратится.

rev = rev * 10 + num % 10

Здесь rev * 10 сместит значение влево, а затем добавит последнюю цифру от оригинала.
Если исходное число было 1258, и в середине времени выполнения мы имеем rev = 85, num = 12, поэтому:
число% 10 = 2
об * 10 = 850
об * 10 + число% 10 = 852

Ответ 5

import java.util.Scanner;

public class Reverse_order_integer {
    private static Scanner scan;

    public static void main(String[] args) {
        System.out.println("\t\t\tEnter Number which you want to reverse.\n");
        scan = new Scanner(System.in);
        int number = scan.nextInt();
        int rev_number = reverse(number);
        System.out.println("\t\t\tYour reverse Number is = \"" + rev_number
                           + "\".\n");
    }

    private static int reverse(int number) {
        int backup = number;
        int count = 0;
        while (number != 0) {
            number = number / 10;
            count++;
        }
        number = backup;
        int sum = 0;
        for (int i = count; i > 0; i--) {
            int sum10 = 1;
            int last = number % 10;
            for (int j = 1; j < i; j++) {
                sum10 = sum10 * 10;
            }
            sum = sum + (last * sum10);
            number = number / 10;
        }
        return sum;
    }
}

Ответ 6

int aa=456;
int rev=Integer.parseInt(new StringBuilder(aa+"").reverse());

Ответ 7

Чтобы получить последнюю цифру любого числа, мы делим ее на 10, чтобы мы достигли нуля или цифры, которая ставится на последнюю, и когда мы делаем это непрерывно, мы получаем целое число как целое число в обратном порядке.

    int number=8989,last_num,sum=0;
    while(number>0){
    last_num=number%10; // this will give 8989%10=9
    number/=10;     // now we have 9 in last and now num/ by 10= 898
    sum=sum*10+last_number; //  sum=0*10+9=9;
    }
    // last_num=9.   number= 898. sum=9
    // last_num=8.   number =89.  sum=9*10+8= 98
   // last_num=9.   number=8.    sum=98*10+9=989
   // last_num=8.   number=0.    sum=989*10+8=9898
  // hence completed
   System.out.println("Reverse is"+sum);

Ответ 8

public static void main(String args[]) {
    int n = 0, res = 0, n1 = 0, rev = 0;
    int sum = 0;
    Scanner scan = new Scanner(System.in);
    System.out.println("Please Enter No.: ");
    n1 = scan.nextInt(); // String s1=String.valueOf(n1);
    int len = (n1 == 0) ? 1 : (int) Math.log10(n1) + 1;
    while (n1 > 0) {
        rev = res * ((int) Math.pow(10, len));
        res = n1 % 10;
        n1 = n1 / 10;
        // sum+=res; //sum=sum+res;
        sum += rev;
        len--;
    }
    // System.out.println("sum No: " + sum);
    System.out.println("sum No: " + (sum + res));
}

Это вернет обратное целое число

Ответ 9

Просто добавьте, в надежде сделать решение более полным.

Логика @sheki уже дала правильный способ обращения целого числа в Java. Если вы принимаете введенный вами ввод и результат всегда попадает в диапазон [-2147483648, 2147483647], вы должны быть в безопасности для использования кодов от @sheki. В противном случае будет хорошей практикой поймать исключение.

В Java 8 были введены методы addExact, subtractExact, multiplyExact и toIntExact. Эти методы будут бросать ArithmeticException при переполнении. Поэтому вы можете использовать приведенную ниже реализацию для реализации чистого и более безопасного метода для обращения к целому числу. Как правило, мы можем использовать указанные методы для математического расчета и явно обрабатывать проблему переполнения, что всегда рекомендуется, если есть возможность переполнения фактического использования.

public int reverse(int x) {
    int result = 0;

    while (x != 0){
        try {
            result = Math.multiplyExact(result, 10);
            result = Math.addExact(result, x % 10);
            x /= 10;
        } catch (ArithmeticException e) {
            result = 0; // Exception handling
            break;
        }
    }

    return result;
}

Ответ 10

Решение Java без цикла. Более быстрый ответ.

int numberToReverse;//your number 
StringBuilder sb=new StringBuilder();
sb.append(numberToReverse);
sb=sb.reverse();
String intermediateString=sb.toString();
int reversedNumber=Integer.parseInt(intermediateString);

Ответ 11

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

Ответ 12

Вот полное решение (возвращает 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;
}

Ответ 13

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

    }

Ответ 14

Хорошо, что вы выписали свой исходный код. У меня есть другой способ закодировать эту концепцию обращения целого числа. Я могу разрешить до 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");

Ответ 15

Метод, позволяющий получить наибольшую степень десяти, меньшую или равную целому числу: (в рекурсии)

public static int powerOfTen(int n) {
    if ( n < 10)
        return 1;
    else
        return 10 * powerOfTen(n/10); 
}

Метод обратного фактического целого числа: (в рекурсии)

public static int reverseInteger(int i) {
    if (i / 10 < 1)
        return i ;
    else
        return i%10*powerOfTen(i) + reverseInteger(i/10);
}

Ответ 16

Даже если отрицательное целое передано, оно даст отрицательное целое число Попробуйте это...

public int reverse(int result) {

    long newNum=0,old=result;
    result=(result>0) ? result:(0-result);

    while(result!=0){
        newNum*=10;
        newNum+=result%10;
        result/=10;
        if(newNum>Integer.MAX_VALUE||newNum<Integer.MIN_VALUE)
            return 0;
    }
    if(old > 0)
        return (int)newNum;
    else if(old < 0)
        return (int)(newNum*-1);
    else 
        return 0;
}

Ответ 17

Это самый короткий код для изменения integer

int i=5263; 
System.out.println(Integer.parseInt(new StringBuffer(String.valueOf(i) ).reverse().toString()));

Ответ 18

123 отображает 321, что можно рассчитать как 3 * (10 ^ 2) + 2 * (10 ^ 1) +1 Для вычисления (10 ^ N) используются две функции. Первая функция вычисляет значение N. Вторая функция вычисляет значение для десяти к мощности N.

Function<Integer, Integer> powerN = x -> Double.valueOf(Math.log10(x)).intValue();
Function<Integer, Integer> ten2powerN = y -> Double.valueOf(Math.pow(10, y)).intValue();

// 123 => 321= 3*10^2 + 2*10 + 1
public int reverse(int number) {
    if (number < 10) {
        return number;
    } else {
        return (number % 10) * powerN.andThen(ten2powerN).apply(number) + reverse(number / 10);
    }
}

Ответ 19

Если идея состоит в том, чтобы не использовать массивы или строку, обратное целое число должно выполняться путем считывания цифр числа из конца по одному. Ниже приводится подробное объяснение, чтобы помочь новичку.

псевдокод:

  • позволяет начать с reverse_number = 0 и некоторого значения для original_number, которое необходимо изменить.
  • the_last_digit = original_number% 10 (т.е. напоминание после деления на 10)
  • original_number = original_number/10 (так как у нас уже есть последняя цифра, удалите последнюю цифру из исходного_сочетания)
  • reverseed_number = reverseed_number * 10 + last_digit (умножьте значение reverse_number на 10, чтобы добавить к нему последний_digit)
  • повторите шаги с 2 по 4, до тех пор, пока номер_источника не станет 0. Когда original_number = 0, reverseed_number будет иметь обратный путь к исходному_сооружению.

Дополнительная информация о шаге 4: если вам предоставляется цифра за раз и просят добавить ее в конце номера, как бы вы это сделали - переместив исходное число на одно место влево, так что для размещения новой цифры. Если число 23 должно стать 234, вы умножаете 23 на 10, а затем добавляете 4.

234 = 23x10 + 4;

код:

public static int reverseInt(int original_number) {
        int reversed_number = 0;
        while (original_number > 0) {
            int last_digit = original_number % 10;
            original_number = original_number / 10;
            reversed_number = reversed_number * 10 + last_digit;    
        }
        return reversed_number;
    }

Ответ 20

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

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

Ответ 21

Это устаревший вопрос, но как ссылка для других Прежде всего обратныйNum должен быть инициализирован до 0;

input% 10 используется для получения последней цифры с ввода

input/10 используется, чтобы избавиться от последней цифры от ввода, которую вы добавили в reversendNum

Предположим, что ввод был 135

135% 10 - 5 Поскольку обратное число было инициализировано равным 0 теперь reverseedNum будет 5

Тогда мы избавимся от 5, разделив 135 на 10

Теперь ввод будет всего 13

Ваш код проходит эти шаги до тех пор, пока все цифры не будут добавлены к обратному номеру или другими словами, пока вход не станет 0.

Ответ 22

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class intreverse
{
public static void main(String...a)throws Exception
{
    int no;
    int rev = 0;
    System.out.println("Enter The no to be reversed");
    InputStreamReader str=new InputStreamReader(System.in);
    BufferedReader br =new BufferedReader(str);
    no=Integer.parseInt(br.readLine().toString());
    while(no!=0)
    {
        rev=rev*10+no%10;
        no=no/10;

    }
    System.out.println(rev);
}
}

Ответ 23

Если вы хотите изменить любое число, например 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);

    }

Ответ 24

Вы можете использовать рекурсию, чтобы решить эту проблему.

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

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

Ответ 25

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;

}

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

Ответ 26

Реверсивное целое число

  int n, reverse = 0;
  Scanner in = new Scanner(System.in);
  n = in.nextInt();

  while(n != 0)
  {
      reverse = reverse * 10;
      reverse = reverse + n%10;
      n = n/10;
  }

  System.out.println("Reverse of the number is " + reverse);

Ответ 27

public static int reverse(int number) {
    int reverse = 0;
    while (number != 0) {
        int reminder = number % 10;
        reverse = reverse * 10 + reminder;
        number = number / 10;
    }

    return reverse;

}

Ответ 28

Я использовал 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);
    }
}

Ответ 29

public static double reverse(int num)
{
    double num1 = num;
    double ret = 0;
    double counter = 0;

    while (num1 > 1)
    {   
        counter++;
        num1 = num1/10;
    }
    while(counter >= 0)
    {
        int lastdigit = num%10;
        ret += Math.pow(10, counter-1) * lastdigit;
        num = num/10;
        counter--;  
    }
    return ret;
}

Ответ 30

public static void reverse(int number) {
    while (number != 0) {
        int remainder = number % 10;
        System.out.print(remainder);
        number = number / 10;
    }

    System.out.println();
}

Что это такое, разделите последнюю цифру (в пределах 10-ти мест) и добавьте ее на передний план, а затем разделите число на 10, удалив последнюю цифру.