题目描述:输入一个整数 n,请检查是否是"回文数"
回文数:正向与反向都一致的数字
例如:
输入:12321
返回:1 代表是回文数
输入:9527
返回:0 代表不是回文数
思路一
我们要输入一个整数,然后再判断这个整数是否为回文数,如果是回文数输出1,如果不是输出0;
那我们首先要解决输入问题
- 创建一个Scanner类对象input,利用类中的nextInt()方法获取键盘输入的数字。
- 紧接着,我们就该要判断它是否是回文数了,怎么判断呢,那不就是把这个数字第一位与最后一位比较是否相同,第二位与倒数第二位进行比较 ,以此类推,如果有不一样,那后面就不用再比了吧,直接就不是回文数了,输出0。
- 那这个时候,我们并不知道这个整数到底有多少位,所以比到什么时候截止,就不太好确定,所以我们转换思维,我们可以用这个整数(9527)和它反转后的数字(7259)相比,如果不一样,说明这个数不是回文数。
- 想要反转整数,我们就应该先把这个int整数类型转换成String字符串类型了,这样通过String类里的(charAt())方法很容易就可以拿到这个数的每位数字。然后将其倒序放入另一个字符串中。
- 进行比较,这里给出多种思路:
- 直接使用String类中的(equals())方法结合三目运算符(或用if…else…判断)
- 转换成整数Int类型,使用(==)进行判断
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
// 1. 获取输入的数字
Scanner input = new Scanner(System.in);
int n = input.nextInt();
// 2. 将数字转换为字符串
String strNumber = String.valueOf(n);
String result = ""; // 用于保存新数字的字符串
// 3.倒序遍历每个字符,组成新数字
for (int i = strNumber.length() - 1; i >= 0; i--) {
result += strNumber.charAt(i);
}
//System.out.println(result.equals(strNumber) ? 1 : 0);
if (result.equals(strNumber)) {
System.out.println(1);
} else {
System.out.println(0);
}
}
}
思路二
同样,我们解决输入,我们认为小于0的均不是回文数,所以我们运用数学方法让数字反转。然后进行判断是否相同。
数学思路:用12321为例
- i: 12321%10=1 (获取最后一个数字保存至临时变量temp中)
- ii: 将获取的最后一个数字存入revese中,需让revese中的数字整体x10,再+temp;此时revese=1;
- iii: 另将原数字中的最后一位删除,则num=num÷10;此时num=1232;
- 然后又重复第一步:temp=1232%10=2;
- 重复第二步:revese=revese×10+temp=1×10+2=12;
- 重复第三步:num=num÷10=123;
- 然后又重复第一步:temp=123%10=3;
- 重复第二步:revese=revese×10+temp=12×10+3=123;
- 重复第三步:num=num÷10=12;
- …依次循环,我们选用while循环
直接看代码吧!
import java.util.Scanner;
public class Program002 {
public static void main(String[] args) {
// 1. 获取输入的数字
Scanner input = new Scanner(System.in);
int n = input.nextInt();
// 2.判断是否是回文数
System.out.println(isPalindromeNumber(n));
}
public static int isPalindromeNumber(int number) {
if(number<0)return 0;
int revese=0,num=number;
while(num!=0){
int temp=num%10;
revese=revese*10+temp;
num/=10;
}
return number==revese ? 1:0;
}
}