Java基础编程——回文数

  • Post author:
  • Post category:java


什么是回文数?

回文数即一个数字从左到右读和从右到左读是同一个数。

Java实现打印所有五位数中的回文数

分析:

要打印所有五位数中的回文数,只需要判断五位数的第一位和第五位是否相同,第二位和第四位是否相同即可。以下第一种方法是按部就班遍历每一个五位数得到的,第二种方法利用了回文数的特点进行实现,第一种的方法在效率上不及第二种方法,毕竟遍历次数是第二种的10倍。因此在编程时也需要进行思维上的转变,在合适时选择执行效率更高的算法。

方法一:

遍历所有5位数(10000-99999),将整型数字转换为字符串,利用字符串的索引机制判断五位数的1、5和2、4位是否相同。

private void method1() {
        //计回文数的个数
        int count = 0;
        //遍历所有五位数
        long startTime = System.currentTimeMillis();
        for (int i = 10000; i < 100000; i++) {
            //将整形数字转换为字符串
//            String num = String.valueOf(i);
            String num = Integer.toString(i);
            //判断是否为回文数
            if (String.valueOf(num.charAt(0)).equals(String.valueOf(num.charAt(4))) &&
                    String.valueOf(num.charAt(1)).equals(String.valueOf(num.charAt(3)))) {
                System.out.print(i + "\t");
                count++;
                if (count % 10 == 0)
                    System.out.println();
            }
        }
        System.out.println("五位数中回文数的个数为:" + count);
        long endTime = System.currentTimeMillis();
        System.out.println("该方法执行时间为"+(endTime-startTime)+"ms");
    }

方法二:

由回文数的特点,五位数的1、5和2、4位相同,可以使用拼接的方式,获取所有五位数中的回文数,使用循环遍历的方式,第一层循环为个位(对应最高位),第二层循环为十位(对应第二位),第三层循环为百位,使用输出语句输出回文数对应的字符串即可。

private void method2() {
        int count = 0;
        //个位为dig_1,十位为dig_2,百位为dig_3
        long startTime = System.currentTimeMillis();
        for (int dig_1 = 1; dig_1 < 10; dig_1++) {
            for (int dig_2 = 0; dig_2 < 10; dig_2++) {
                for (int dig_3 = 0; dig_3 < 10; dig_3++) {
                    System.out.print(dig_1 + "" + dig_2 + "" + dig_3 + "" + dig_2 + "" + dig_1 + "\t");
                    count++;
                    if (count % 10 == 0)
                        System.out.println();
                }
            }
        }
        System.out.println("五位数中回文数的个数为:" + count);
        long endTime = System.currentTimeMillis();
        System.out.println("该方法执行时间为"+(endTime-startTime)+"ms");
    }

判断一个数是否为回文数

分析:

使用Scanner类输入一个数字,判断这个数字对应位上的数字是否相同即可。同理也是将输入的数字转换为字符串,再将字符串转换为字符数组,利用索引机制判断对应位上数字是否相同即可。如果输入的数字位数为奇数位,只需利用循环判断位数/2-1次就可以判断是否为回文数,如果输入的数字位数为偶数,判断位数/2次即可;当某一次判断对应位数字不相同时,即可跳出循环,判定该数字不是回文数。

//判断一个数是否为回文数
    private void isPalindrome() {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入需要判断的数字:");
        int num = input.nextInt();
        String s = Integer.toString(num);
        char[] array = s.toCharArray();
        boolean flag = true;

        for (int i = 0; i < array.length / 2; i++) {
            if (array[i] != array[array.length - i - 1]) {
                flag = false;
                System.out.println("你输入的数字不是回文数!");
                break;
            }
        }
        if (flag)
            System.out.println("你输入的数字是回文数!");
    }

部分内容参照

Java基础50道经典练习题(22年新版)



版权声明:本文为qq_53563793原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。