关于回文数有很多种解法,第一种可以使用字符串反转,这种解法较为简单。首先将number转换为StringBuilder类型,然后使用reverse()方法将字符串反转,之后将反转后的字符串和number都转化为String类型进行equals判断,若结果为true则该数是回文数,这种方法的代码 参考写法如下:
//将number转化为StringBuilder类型并取反
StringBuilder sb = new StringBuilder(number+"").reverse();
//将sb和number转化为String类型进行equals判断
if (sb.toString().equals(number+"")){
System.out.println("是回文数");
}else{
System.out.println("不是回文数");
}
第二种解法是逐次取位,通过循环取余将每一位上的数字取出,然后个位与万位相比,十位与千位相比。以12321举例,第一次循环将12321%10得到个位数字1,然后将12321/10得到1232。第二次循环将1232%10得到十位数字2,然后将1232/10得到123,以此类推。那么这种方式的代码参考写法如下:
int arr[] = new int[5];// 创建一个大小为5的数组
int i = 0;
do {// 逐次取位
arr[i] = number % 10;
number /= 10;
i++;
} while (i < 5);
if (arr[0] == arr[4] && arr[1] == arr[3]) {
System.out.println("是回文数");
} else {
System.out.println("不是回文数");
}
还有一种解法,我们可以反转一半的数字,这种方式理解起来较为困难,这里以举例子的形式进行讲解,例如12321,我们可以将后半部分的21反转为12,与前半部分的12进行对比,那么如果二者相同,该数字就是回文数。那么如何将后半部分数字取反呢?这里与第二种解法思路类似,使用循环取出个位数,然后将number/10,之后进入第二次循环取出十位数,将第一次循环得到的个位数x 10之后加上这个十位数然后将number/10。由于题目规定为五位数字,那么我们只需要循环两次即可。用12321举例,第一次循环得到的个位数字为1,number为1232;第二次循环得到的个位数x 10之后加上这个十位数得到的数字为12,number为123。那么到这里后半段数字就被倒转了,将number/10即抛弃不影响判断的中位数3,将number和倒转后的数字做对比,若相等则说明该数字是回文数。这种思路的参考代码如下:
int reverseHalfNumber = 0;
for (int i = 0; i <2 ; i++) {
reverseHalfNumber = reverseHalfNumber * 10 + number % 10;
number /= 10;
}
if (number/10 == reverseHalfNumber ){
System.out.println("是回文数");
}else {
System.out.println("不是回文数");
}
附上完整代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
int number = console.nextInt();
//write your code here......
int arr[] = new int[5];// 创建一个大小为5的数组
int i = 0;
do {// 逐次取位
arr[i] = number % 10;
number /= 10;
i++;
} while (i < 5);
if (arr[0] == arr[4] && arr[1] == arr[3]) {
System.out.println("是回文数");
} else {
System.out.println("不是回文数");
}
}
}