反转整数而不会丢失输入中的0

时间:2013-05-05 21:59:08

标签: java int reverse

我有以下代码来反转整数输入。但是,如果我在开头输入带有零的输入,例如01234,它将返回整数4321而不是43210.我已经查看了其他解决方案,但它们都通过将输入作为字符串然后反转字符串来解决问题。但是,我需要输入的类型为int。

有没有人有任何想法如何解决这个问题?

public static int reverseInputNumber(int num){
    int reverse = 0;
    while(num!=0) {
        reverse = (reverse*10)+num%10;
        num /= 10;
    }
    return reverse;
}

3 个答案:

答案 0 :(得分:2)

整数存储整数值,而不是整数值的特定表示的编码。所以为了真正得到你想要的东西你正在谈论逆转整数的表示。

编辑:我想我会添加一些代码来解决使用字符串的解决方案。

public static int reverseInputNumber(int num)
{
    String reverse = StringBuilder(num + "").reverse().toString();
    return reverse;
}

第二次编辑:实际上即使这段代码也不会做你想做的事情。通过将int作为参数,您已经丢失了整数的原始表示。可以准确地说,没有函数可以只取一个整数参数并返回一些与其原始表示相反的东西。您只需要处理字符串或其他更合适的数据结构。

答案 1 :(得分:1)

在java中,使用零作为最高有效数字,它将数字解释为八进制数。因此01234会转换为:

4 + 3 x 8 + 2 x 8^(2) + 1 x 8^(3) = 668

所以你最好使用其中一种转换为字符串的方法,就像在其他答案中一样。

编辑:这是一个没有StringBuffer等的版本:

public String getReversed(int number) {
    char[] digitArray = String.valueOf(number).toCharArray();
    String strNum = "";

    for (int i = digitArray.length - 1; i >= 0; i--) {
        strNum += digitArray[i];
    }
    return strNum;
}

第二次修改:撤消char数组,然后在完成撤消后创建String,因为可能会创建一些O(n^2)次操作对垃圾收集器来说是一个问题。

public String getReversed(int number) {
    char[] digitArray = String.valueOf(number).toCharArray();
    char[] reversedDigitArray = new char[digitArray.length];

    for (int i = 0; i < digitArray.length; i++) {
        reversedDigitArray[i] = digitArray[digitArray.length - i - 1];
    }
    return new String(reversedDigitArray);
}

3rd Edit:使用就地算法交换字符。

public static String getReversed(int number) {
    char[] digitArray = String.valueOf(number).toCharArray();
    int count = digitArray.length - 1;
    char tmp;

    for (int i = (count-1) >> 1; i >= 0; --i) {
        tmp = digitArray[i];
        digitArray[i] = digitArray[count - i];
        digitArray[count - i] = tmp;
    }
    return new String(digitArray);
}

答案 2 :(得分:0)

如果您的输入必须是int,请将其转换为String并将其反转。

String reverseInt(int in){
    String a = Integer.toString(in);
    return new StringBuilder(a).reverse().toString();
}

如果您的输出必须是int,则无法使用前导0