Java在不使用数组的情况下反转int值

use*_*501 34 java reverse integer

任何人都可以向我解释如何在不使用数组或字符串的情况下反转整数.我从网上得到了这个代码,但不是很明白为什么+输入%10并再次划分.

while (input != 0) {
    reversedNum = reversedNum * 10 + input % 10;
    input = input / 10;   
}
Run Code Online (Sandbox Code Playgroud)

以及如何使用此示例代码仅反转奇数.示例我得到了此输入12345,然后它将奇数反转为输出531.

Eri*_*ski 90

Java反转int值 - 原则

  1. 将输入int修改(%)10将从最右边的数字中提取.例如:(1234%10)= 4

  2. 将整数乘以10将"向左推",在该数字的右侧显示零,例如:(5*10)= 50

  3. 将整数除以10将删除最右边的数字.(75/10)= 7

Java反转一个int值 - 伪代码:

一个.提取输入数字的最右边数字.(1234%10)= 4

湾 取该数字(4)并将其添加到新的reversedNum中.

C.将reversedNum乘以10(4*10)= 40,这会在您的(4)右侧显示零.

d.将输入除以10,(删除最右边的数字).(1234/10)= 123

即 用步骤123重复步骤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;
}
Run Code Online (Sandbox Code Playgroud)

在真实的工作环境中,你永远不会做这样的事情.然而,你在没有帮助的情况下使用它来解决问题的过程将能够解决问题的人与那些想要解决问题的人区分开来,但除非他们被博客上的好人用勺子喂食,否则就不能分开.

  • 这应该是公认的答案。太棒了谢谢 (2认同)
  • 这是 2005 年到 2010 年间流行的程序员面试问题,在官方环境中第​​三次被问到这个问题后,我想我应该一劳永逸地解决它。没想到会这么炸。无论如何,这主要是一个令人讨厌的问题,因为程序员很少或永远不必像这样接近金属进行位移位工作。一种理论是,在 2005 年之前编码的程序员认为移位是圣杯,因此这是一种确定您是否是编码超过 15 年的程序员的方法。优秀程序员的标志是 10 年的日常实践。 (2认同)

she*_*eki 31

我不清楚你的奇数.此代码的工作方式是(它不是Java特定的算法)例如.输入= 2345第一次在while循环中rev = 5输入= 234第二次rev = 5*10 + 4 = 54输入= 23第三次rev = 54*10 + 3输入= 2第四次rev = 543*10 + 2输入= 0

所以反转的数字是5432.如果你只想要反转数字中的奇数,那么.代码是:

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

    }
    input = input / 10; 
}
Run Code Online (Sandbox Code Playgroud)

  • 它将循环无限? (3认同)

Gan*_*mar 12

只需你可以使用它

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

您可以将此方法与您想要反转的给定值一起使用.


Ahm*_*mdy 9

while (num != 0) {
    rev = rev * 10 + num % 10;
    num /= 10;
}
Run Code Online (Sandbox Code Playgroud)

这是我用于此问题的解决方案,它工作正常.更多细节:

num % 10
Run Code Online (Sandbox Code Playgroud)

此声明将为您提供原始号码的最后一位数字.

num /= 10
Run Code Online (Sandbox Code Playgroud)

该语句将消除原始数字的最后一位数,因此我们确定while循环将终止.

rev = rev * 10 + num % 10
Run Code Online (Sandbox Code Playgroud)

这里rev*10将左移值,然后添加原始的最后一位数.
如果原始数字是1258,并且在运行时间中间我们有rev = 85,num = 12所以:
num%10 = 2
rev*10 = 850
rev*10 + num%10 = 852