1

我有以下代码可以反转整数输入。但是,如果我在开头输入零,例如 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;
}
4

3 回答 3

2

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

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

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

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

于 2013-05-05T22:00:49.420 回答
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);
}

第三次编辑:用就地算法交换字符。

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);
}
于 2013-05-05T23:17:10.543 回答
0

如果您的输入需要是 anint然后将其转换为String并反转它。

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

如果您的输出需要是 a int,则无法获得领先的0.

于 2013-05-05T22:03:35.500 回答