程序员的算法趣题01:求用十进制、二进制、八进制表示都是回文数的所有数字中,大于十进制数 10 的最小值

这个系列是完成《程序员的算法趣题》这本书的习题,奈何这本书没有给出Java版本的代码,所以决定自己动手做,也好回顾忘掉的知识。不足之处,请多指教。

题目如上所示:

public class TestOne {

    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        int x = 11;
        while ( x > 10 ){
            if ( TestOne.checkNumber(String.valueOf(x)) && TestOne.checkNumber(Integer.toBinaryString(x))
                    && TestOne.checkNumber(Integer.toOctalString(x))){
                break;
            }
                        x++;
        }
        long end = System.currentTimeMillis();
        System.out.println("这个所求的数是: " + x);
        System.out.println("所耗费的时间是: " + (end-start) + "毫秒");
    }

    // 判断一个数字是否为回文数
    public static boolean checkNumber(String arg){
       
        char[] nums = String.valueOf(arg).toCharArray();

        int length = nums.length;

        for (int i = 0; i < length / 2; i++){
            char temp = nums[length-i-1];
            nums[length-i-1] = nums[i];
            nums[i] = temp;
        }

        if( String.valueOf(arg).equals(String.valueOf(nums))){
            return true;
        }else {
            return false;
        }

    }

}

值得注意的点

  1. && 和 & 的区别,&&具有短路功能,当某个数十进制时不为回文数时就不用判断后面的了,虽然判断的语句有些厂,但是用新的值将其结果接收再拿进来判断会增加开销。
  2. Java中有实现好的方法,在Integer中存在方法Integer.toBinaryString(),Integer.toOctalString()还有十六进制的转换方法Integer.toHexString()。
  3. 判断一个数是否为回文数时,较为简单的方法是将该数组的首尾各对应的位置直接对换,无论数组中的元素为基数还是偶数。

猜你喜欢

转载自blog.csdn.net/qq_32801733/article/details/86617528