回文数
question
输入一个整数,如果该数是一个回文整数,打印“true”,否则,返回false。
概念解释:回文数是指正序(从左到右)和倒序(从右到左)读都是一样的数。
例如:121是回文,而123不是。
输出样例:
看到题目,必然少不了分析的一步:
“输入一个整数”:第一步,Scanner类的三步走
“如果该数是一个回文整数”:有if,而且还要判断是不是回文数
最后根据是不是回文数,打印相应语句。
看到这,代码构成的框架应该有了:输入数—— if语句判断回文数——语句输出
没错,这个如何判断回文数就是我们的核心代码。
正过来是它,反过来还是它。
/ 和 % 的妙用
怎么反?
我们举个数:123,
123 / 10 = 12,本来还有个小数的,但是它是整型,只能无奈地舍弃了小数。
123% 10 = 3,欸?!%竟然可以只要小数(余数),不要前面的整数。
你是否悟到了什么?
我们要拆、又要反过来,/ 恰好可以分离最后一位,%又可以拿到最后一位。
把每次得到的数都加在上一个数的最后,不就实现了”反“。
12 % 10 = 2拿到2了,该拿1了
12 / 10 = 1;
1 % 10 = 1;
...
小总结:拆和反同时出现,循环+ / +%
代码实现:
核心代码
x = num % 10;//拿到最后一位
num /= 10;//,去掉末位,让前一位变成最后一位,方便下次继续拿
comp = comp * 10 + x;// 上一次的最后一位已经乘10进一位,把自己原来的位置让给新来的
num是我们输入的数,comp最后是反过来的数。简单相加是不能做到反过来的。
既然,有下次就会有下下次,次次无穷尽也————不知道循环次数,使用while
笔锋一转,停止条件是什么?我拿完了所有的数呗,num已经被我榨干了!
while(num != 0)
{
x = num % 10;
num /= 10;
comp = comp * 10 + x;
}
if比较并输出:
既然num一直在被我们榨干,它是一个变量,最后再也不是当初的模样。
comp这个反过来的数和谁比呢?我们不妨在创建一个变量,在num没进入循环前,让这个变量记住它的模样。
int temp = num;
比较代码我们这里不再详说:
if(comp == temp)
System.out.println("true");
else
System.out.println("false");
完整代码参考:
package www.tot.demo;
import java.util.Scanner;
public class Main {
//回文数
//回文数顾名思义:左边读是这个数,右边读也是这个数
//核心思路:拿到数的每一位然后再相接
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);//输入一个数
int num = sc.nextInt();
int temp = num;
int x = 0;
int comp = 0;
while(num != 0)
{
x = num % 10;
num /= 10;
comp = comp * 10 + x;
}
if(comp == temp)
System.out.println("true");
else
System.out.println("false");
}
}