Java递归反转整数
时间: 2024-09-04 12:01:55 浏览: 101
递归反转整数是指使用函数自身的调用来实现数字顺序的改变。在Java中,我们可以使用位操作(bit manipulation)来处理这个问题,因为整数可以视为二进制序列。以下是递归反转整数的一个简单示例:
```java
public class Main {
public static int reverse(int x) {
// 特殊情况:0 或者负数直接返回
if (x == 0 || (x < 0 && (long)x << 31 > Integer.MAX_VALUE)) {
return x;
}
// 取出最低位并移除它
int lastDigit = x & 1; // 最低位
int rest = x >> 1; // 移除最低位
// 递归反转剩余部分,并将结果左移一位加上最后一位
return reverse(rest) << 1 | lastDigit;
}
}
```
在这个例子中,`reverse` 函数首先检查输入是否为0或负数,然后通过按位与 `&` 获取最低位,右移 `>>` 操作移除最低位,再对剩下的部分进行递归反转。最后,通过左移 `<<` 和按位或 `|` 合并最高位和反转后的其余位。
相关问题
编写Java程序实现,不使用循环语句,从键盘输入一个7位的整数,逆 输出这个7位整数,如8639427输出为7249368. 提示:使用a%10得到a的个位,再通过a/10得到除个位外剩下的位。
可以使用递归的方式来实现这个功能,因为递归函数会自动处理每一位数字,并将其添加到结果的最前面。以下是使用递归的Java代码示例:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个7位的整数:");
int input = scanner.nextInt();
if (input < 10 || input > 999999) {
System.out.println("输入错误,请确保是7位整数。");
return;
}
// 递归函数将个位放在最前面
String reversedNum = reverse(input);
System.out.println("逆序后的数字是: " + reversedNum);
}
// 递归函数,将输入的整数转换成字符串并反转
private static String reverse(int num) {
if (num == 0) { // 当前数字是个位,返回该数字
return Integer.toString(num);
} else {
// 提取个位并移除,然后递归处理剩余部分
int lastDigit = num % 10; // 获取个位
int remaining = num / 10; // 去掉个位后的部分
return reverse(remaining) + lastDigit; // 递归并连接
}
}
}
```
在这个程序中,用户输入一个7位整数,如果输入合法,程序会调用`reverse`函数,每次递归都将原数的个位移到结果的最前面。
编写Java程序实现,不使用循环语句,从键盘输入一个7位的整数,逆序输出这个7位整数,如8639427输出为7249368。 提示:使用a%10得到a的个位,再通过a/10得到除个位外剩下的位。
在Java中,我们可以使用递归的方式来实现这个需求,而不使用循环语句。下面是一个简单的示例:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个7位的整数:");
int num = scanner.nextInt();
if (num < 10 || num > 999999) {
System.out.println("输入的不是7位整数,已退出.");
return;
}
reverse(num, 0);
}
// 递归函数,用于反转数字
private static void reverse(int num, int pos) {
if (pos == 6) { // 当位置达到6,表示已经取到了所有七位数
System.out.print(num % 10); // 输出个位
} else {
reverse(num / 10, pos + 1); // 继续递归处理剩余部分
System.out.print((num % 10) * Math.pow(10, pos)); // 输出当前位,并调整为原位
}
}
}
```
当你运行此程序并输入一个7位整数后,它会逆序输出这个数。
阅读全文