閒聊藍橋杯JAVA - 生成迴文數

Lee宇斌發表於2018-05-23

生成迴文數

D:簡單的題目

標題:生成迴文數

所謂迴文數就是左右對稱的數字,比如:
585,5885,123321...
當然,單個的數字也可以算作是對稱的。

小明發現了一種生成迴文數的方法:
比如,取數字19,把它與自己的翻轉數相加:
19 + 91 = 110,如果不是迴文數,就再進行這個過程:
110 + 011 = 121 這次是迴文數了。

200以內的數字中,絕大多數都可以在30步以內變成迴文數,只有一個數字很特殊,就算迭代了1000次,它還是頑固地拒絕迴文!

請你提交該頑固數字,不要填寫任何多餘的內容。

M:簡單解法,這裡不做過多解釋

import java.math.BigInteger;

public class Test3 {  
    public static void main(String[] args) {
        for (int i = 10; i < 200; i++) {
            BigInteger bi = new BigInteger(i+"");
            if(!back(bi)){
                System.out.println(i);
                return;
            }
        }
    }
    /**
     * 生成迴文過程
     * @param i
     * @return   true生成成功   false生成失敗
     */
    private static boolean back(BigInteger num) {
        int count =0;
        while(count <= 1000){
            if(canBack(num)){
                return true;
            }
            num = num.add(changNum(num));
            count++;
        }
        return false;
    }
    /**
     * 變化數字
     * @param num
     * @return
     */
    private static BigInteger changNum(BigInteger num) {
        //顛倒
        String str = "";
        char[] arr = num.toString().toCharArray();
        for (int i = arr.length-1; i>=0; i--) {
            str += arr[i];
        }
        return new BigInteger(str);
    }
    /**
     * 判斷是否為迴文數
     * @param i
     * @return
     */
    private static boolean canBack(BigInteger num) {
        String str = num.toString();
        int start = 0;
        int end = str.length()-1;
        while(start < end){
            char a = str.charAt(start);
            char b = str.charAt(end);
            if(a != b){
                return false;
            }
            start++;
            end--;
        }
        return true;
    }

}  

因為int長度不夠,故使用BigInteger

相關文章