判断一个数是否为回文数,给一个数求出是几位数

本文介绍了一种通过不同Java方法实现回文数判断的技术。包括使用数组、字符串操作及字符数组等方式来验证整数或字符串是否为回文形式,并详细解释了每种方法的实现步骤。
package arithmetic;

/**
 *      判断一个是不是回文数。
 *      判断是否为回文内容
 *      给一个数求出是几位数
 *
 * @author sunRainAmazing
 *
 */
public class PalindromeNumber {

    public static void main(String[] args) {

        isPalindromeNumber_array(1);
        isPalindromeNumber_array(10001);
        isPalindromeNumber_array(123433);


        isPalindromeNumber_charAt("天连水尾水连天");
        isPalindromeNumber_charAt("雾锁山头山不锁雾");

        isPalindromeNumber_substring("231132");
        isPalindromeNumber_substring("222332");

        isPalindromeNumber_toCharArray(222332);
        isPalindromeNumber_toCharArray(10001);



    }
    /**
     * 判断一个输入的int类型的数是否为回文数
     *      给一个数求出是几位数---见2、while区块代码
     *      逆序输出这个数---见3、for循环体
     * @param number 判断的数字
     */
    public static void isPalindromeNumber_array(int number){
        //1、定义出需要的变量
        int temp,flag;
         flag=temp=number;
        int count=1;

        //2、求出相应的位数
        while((number=number/10)!=0){
            count++;
        }

        //3、将各位数加入到数组中去
        //      ---可以通过for在将其赋值的结果输出
        int[] arr=new int[count];
        for (int i = 0; i < count; i++) {
            arr[i]=temp%10;
            temp/=10;
        }

        //4、进行判断对应的数是否相等
        for (int i = 0; i < count; i++) {
            if(arr[i] != arr[count-1-i]){
                System.out.println(flag+" 不是回文数");
                return ;    //这里不能使用break
            }
        }
        System.out.println(flag+" 是回文数");
    }




    /**
     * 利用String字符串的相应方法
     *      主要用到的方法: 
     *              求长度:.length()方法
     *                          charAt(int index)  返回指定索引处的 char 值。 
     * 
     * @param number
     */
    public static void isPalindromeNumber_charAt(String str){
        //将其转为数组
        int length=str.length();
        for (int i = 0; i < length/2; i++) {
            if(str.charAt(i)!=str.charAt(length-1-i)){
                System.out.println(str+" --->不是回文内容");
                return;
            }
        }
        System.out.println(str+" --->是回文内容");
    }






    /**
     * 利用String字符串的相应方法
     *      主要用到的方法:
     *          length()        计算字符串的长度
     *          String  substring(int beginIndex, int endIndex) 
     *                      返回一个新字符串,它是此字符串的一个子字符串。 
     *                      区间  [a,b)   为前闭后开,取前不取后
     *          equals()    判断两个字符串是否相等
     * @param number
     */
    public static void isPalindromeNumber_substring(String str){
        //将其转为数组
        int length=str.length();
        for (int i = 0; i < length/2; i++) {
            if(!str.substring(i, i+1).equals(str.substring(length-1-i, length-i))){
                System.out.println(str+" --->不是回文内容");
                return;
            }
        }
        System.out.println(str+" --->是回文内容");
    }





    /**
     * 利用String字符串的相应方法
     *          char[]   toCharArray() 
     *                将此字符串转换为一个新的字符数组。 
     * @param number
     */
    public static void isPalindromeNumber_toCharArray(int number){
        //将其转为数组
        char[] arr=(number+"").toCharArray();
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]!=arr[arr.length-1-i]){
                System.out.println(number+" 不是回文数");
                return;//注意这里 不能使用break
            }
        }
        System.out.println(number+" 是回文数");
    }


}

### 题目重述 给出一个判断是否为五位,以及是否回文数。 --- ### 答案 需根据输入具体判断。以下为通用解法与逻辑分析。 --- ### 详解 #### 步骤1:判断是否为五位 一个 $ n $ 是五位的条件是: $$ 10000 \leq n \leq 99999 $$ 若不在此范围,则不是五位,也无法构成五位回文数。 #### 步骤2:若是五位判断是否回文数 设五位为 $ abcde $,它是回文数当且仅当: - 第1位 = 第5位(即 $ a = e $) - 第2位 = 第4位(即 $ b = d $) 中间位 $ c $ 可任意。 ##### 提取各位字的方法(C语言): - 万位:$ a = n / 10000 $ - 千位:$ b = (n / 1000) \% 10 $ - 百位:$ c = (n / 100) \% 10 $ - 十位:$ d = (n / 10) \% 10 $ - 个位:$ e = n \% 10 $ 然后比较 $ a == e $ 且 $ b == d $ --- #### 完整 C 代码示例: ```c #include <stdio.h> int main() { int n; printf("请输入一个:"); scanf("%d", &n); // 判断是否为五位 if (n >= 10000 && n <= 99999) { printf("是五位\n"); int a = n / 10000; // 万位 int b = n / 1000 % 10; // 千位 int c = n / 100 % 10; // 百位 int d = n / 10 % 10; // 十位 int e = n % 10; // 个位 if (a == e && b == d) { printf("是回文数\n"); } else { printf("不是回文数\n"); } } else { printf("不是五位\n"); printf("无法判断是否为五位回文数\n"); } return 0; } ``` --- #### 示例运行: 1. 输入:`12321` 输出: ``` 是五位回文数 ``` 2. 输入:`12345` 输出: ``` 是五位 不是回文数 ``` 3. 输入:`999` 输出: ``` 不是五位 无法判断是否为五位回文数 ``` --- ### 知识点(列出解答该问题需要的知识点) 1. **值范围判断**:五位满足 $10000 \leq n \leq 99999$。 2. **整位提取方法**:利用 `/` `%` 分离每字。 3. **回文数判定条件**:首位与末位、次位与倒第二位相等。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值