香雨站

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 88|回复: 0

经典Java题目每日一练-第五天-回文数判断

[复制链接]

2

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-9-23 13:34:41 | 显示全部楼层 |阅读模式
1. 前言

今天练习的题目是回文数的判断,今天的题目相对比较简单,花费时间较少!!!
2. 题目描述




请补全预设代码中判断回文数的方法,若输入的五位数字是回文是则返回true,否则返回false。回文数即个位与万位相同,十位与千位相同的数字。如:12321、89898

输入描述:
控制台输入的五位数
输出描述:
true/false
3. 示例1


输入:12321
复制
输出:true
复制
4. 示例2


输入:18182
复制
输出:false

5. 思路分析

关于回文数有很多种解法,第一种可以使用字符串反转,这种解法较为简单。首先将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 = 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("不是回文数");
}6. 题解

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 = number % 10;
    number /= 10;
    i++;
} while (i < 5);
if (arr[0] == arr[4] && arr[1] == arr[3]) {
    System.out.println("是回文数");
} else {
    System.out.println("不是回文数");
}

    }
}7. 刷题经验分享



刷题不是简简单单做几个题,是建立在学会了知识点、有一定解题经验、了解一些解题方法的基础上,高密度持续一段时间做大量的题目,达到看上去仿佛是背答案,其实是基于熟悉解题过程及丰富的计算经验,通过心算来秒答小题或者大题的某些过程 的水平。
我最经在练习Java经典的练习题目,感觉自己能力有了很大的提高!!


8. 总结

这个代码是这个题的扩展,题目中单单要求了五位数的回文,这个代码考虑到了奇数或者是偶数,也考虑到了几位数的情况,有不足的地方希望大家给点建议
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|香雨站

GMT+8, 2025-3-15 06:04 , Processed in 0.741290 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表