我有下面的代码来反转一个整数输入。但是,如果我输入的输入以零开头,例如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;
}发布于 2013-05-06 07:17:11
在java中,使用0作为最高有效数字,它将数字解释为八进制数。因此,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);
}https://stackoverflow.com/questions/16389558
复制相似问题