有人能解释一下如何在不使用数组或字符串的情况下反转整数吗?我从网上得到了这段代码,但并不真正理解为什么要使用“+ input % 10”,然后再除以10。
while (input != 0) {
reversedNum = reversedNum * 10 + input % 10;
input = input / 10;
}
怎样使用这个示例代码只反转奇数数字。比如我输入12345,那么它会将奇数数字反转为531。
如何在Java中反转一个int值 - 原理
使用模运算(%)提取出输入整数的最右边的数字。例如:(1234 % 10) = 4
将整数乘以10会将其“向左移”,在该数字右边显示一个零,例如:(5 * 10) = 50
将整数除以10将去除最右边的数字。(75 / 10) = 7
如何在Java中反转一个int值 - 伪代码:
a. 提取输入数字的最右边的数字。例如:(1234 % 10) = 4
b. 取出该数字(4)并添加到一个新的翻转数字中。
c. 将翻转数字乘以10(4 * 10)= 40,这在你的(4)右侧暴露出一个零。
d. 将输入除以10(去掉最右边的数字)。(1234 / 10) = 123
e. 再次从步骤a开始,使用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;
}
在真正的工作世界中,你永远不会做这样的事情。然而,通过自己解决问题的过程是区分能够解决问题的人和那些想要解决问题但除非得到博客上好心人的指导,否则无法解决问题的人的关键所在。
我不是很清楚您的奇数指的是什么。 这段代码的工作方式是(它不是一个特定于Java的算法) 例如: 输入=2345 第一次进入while循环 rev = 5 input = 234 第二次 rev = 5 * 10 + 4 = 54 input = 23 第三次 rev = 54 * 10 + 3 input = 2 第四次 rev = 543 * 10 + 2 input = 0
因此,反转后的数字是5432。 如果只想要反转后数字中的奇数,则使用以下代码:
while (input != 0) {
last_digit = input % 10;
if (last_digit % 2 != 0) {
reversedNum = reversedNum * 10 + last_digit;
}
input = input / 10;
}
reversedNum = reversedNum * 10 + input % 10;
。 - Faisal Feroz你可以简单地使用这个
public int getReverseInt(int value) {
int resultNumber = 0;
for (int i = value; i !=0; i /= 10) {
resultNumber = resultNumber * 10 + i % 10;
}
return resultNumber;
}
您可以使用此方法来反转您想要的给定值。
while (num != 0) {
rev = rev * 10 + num % 10;
num /= 10;
}
那是我用于解决这个问题的方法,它运行良好。 更多细节:
num % 10
这条语句将会获取原始数字的最后一位数字。
num /= 10
这个语句将从原始数字中删除最后一位数字,因此我们可以确信while循环将终止。
rev = rev * 10 + num % 10
这里的 rev*10 操作会将数值向左移动一位,然后加上原始数值的最后一位。
如果原始数值是 1258,在运行过程中当 rev = 85、num = 12 时,执行以下步骤:
num%10 = 2
rev*10 = 850
rev*10 + num%10 = 852
int aa=456;
int rev=Integer.parseInt(new StringBuilder(aa+"").reverse());
int numberToReverse;//your number
StringBuilder sb=new StringBuilder();
sb.append(numberToReverse);
sb=sb.reverse();
String intermediateString=sb.toString();
int reversedNumber=Integer.parseInt(intermediateString);
sb.reverse()
内部有一个循环。 - Steephen获取任何数字的最后一位,我们需要将它除以10,这样就可以得到一个位于最后的数字或零。如果我们持续地这样操作,我们会得到整个数字的反向整数。
int number=8989,last_num,sum=0;
while(number>0){
last_num=number%10; // this will give 8989%10=9
number/=10; // now we have 9 in last and now num/ by 10= 898
sum=sum*10+last_number; // sum=0*10+9=9;
}
// last_num=9. number= 898. sum=9
// last_num=8. number =89. sum=9*10+8= 98
// last_num=9. number=8. sum=98*10+9=989
// last_num=8. number=0. sum=989*10+8=9898
// hence completed
System.out.println("Reverse is"+sum);
import java.util.Scanner;
public class Reverse_order_integer {
private static Scanner scan;
public static void main(String[] args) {
System.out.println("\t\t\tEnter Number which you want to reverse.\n");
scan = new Scanner(System.in);
int number = scan.nextInt();
int rev_number = reverse(number);
System.out.println("\t\t\tYour reverse Number is = \"" + rev_number
+ "\".\n");
}
private static int reverse(int number) {
int backup = number;
int count = 0;
while (number != 0) {
number = number / 10;
count++;
}
number = backup;
int sum = 0;
for (int i = count; i > 0; i--) {
int sum10 = 1;
int last = number % 10;
for (int j = 1; j < i; j++) {
sum10 = sum10 * 10;
}
sum = sum + (last * sum10);
number = number / 10;
}
return sum;
}
}
补充一下,希望能让解决方案更完整。
@sheki的逻辑已经给出了在Java中反转整数的正确方法。如果您假设您使用的输入和得到的结果始终在范围[-2147483648, 2147483647]
内,那么您可以安全地使用@sheki的代码。否则,最好捕获异常进行练习。
Java 8引入了方法addExact、subtractExact、multiplyExact和toIntExact。这些方法将在溢出时抛出ArithmeticException
。因此,您可以使用下面的实现来实现一个干净且稍微安全的方法来反转一个整数。通常,我们可以使用上述方法来进行数学计算并明确处理溢出问题,如果实际使用中存在溢出可能性,这是始终推荐的。
public int reverse(int x) {
int result = 0;
while (x != 0){
try {
result = Math.multiplyExact(result, 10);
result = Math.addExact(result, x % 10);
x /= 10;
} catch (ArithmeticException e) {
result = 0; // Exception handling
break;
}
}
return result;
}
2147483647
会导致输出 7463847412
,即溢出。实际允许/不允许的数字集合要复杂得多。 - Brydon Gibsonpublic static void main(String args[]) {
int n = 0, res = 0, n1 = 0, rev = 0;
int sum = 0;
Scanner scan = new Scanner(System.in);
System.out.println("Please Enter No.: ");
n1 = scan.nextInt(); // String s1=String.valueOf(n1);
int len = (n1 == 0) ? 1 : (int) Math.log10(n1) + 1;
while (n1 > 0) {
rev = res * ((int) Math.pow(10, len));
res = n1 % 10;
n1 = n1 / 10;
// sum+=res; //sum=sum+res;
sum += rev;
len--;
}
// System.out.println("sum No: " + sum);
System.out.println("sum No: " + (sum + res));
}
这将返回整数的反转
long
,却只返回一个int
?这与除法精度有关吗? - Ghoti and Chips