我有下面的代码来反转一个整数输入。但是,如果我输入的输入以零开头,例如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 06:00:49
整数存储整数值,而不是对整数值的特定表示形式的编码。所以为了真正得到你想要的,你正在讨论颠倒一个整数的表示。
编辑:我想我应该添加一些代码来使用String来解决这个问题。
public static int reverseInputNumber(int num)
{
String reverse = StringBuilder(num + "").reverse().toString();
return reverse;
}第二次编辑:实际上,即使是这段代码也不会做你想让它做的事情。通过将int作为参数,您已经丢失了整数的原始表示形式。准确地说,没有函数可以只接受一个整数参数,并返回与其原始表示相反的内容。您只需要处理字符串或其他更合适的数据结构。
发布于 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);
}发布于 2013-05-06 06:03:36
如果您的输入必须是int,则将其转换为String并反转。
String reverseInt(int in){
String a = Integer.toString(in);
return new StringBuilder(a).reverse().toString();
}如果你的输出必须是一个int,就不可能有一个前导的0。
https://stackoverflow.com/questions/16389558
复制相似问题