1. 程式人生 > >Java程式設計題目-7:快樂數

Java程式設計題目-7:快樂數

前天看一個人的筆試經驗提到了程式設計題目:快樂數。快樂數是什麼?快樂數(happy number)有以下的特性:在給定的進位制下,該數字所有數位(digits)的平方和,得到的新數再次求所有數位的平方和,如此重複進行,最終結果必為1。
詳情請查閱百度百科中快樂數的定義。
我們使用十進位制來進行一般理解:就是一個十進位制的數字,將其每一位的數字取出進行平方和的累加,得到的新數字重複該操作,直至得到的平方和為1,那麼該數字為快樂數。
接下來進行程式碼實現,我採用十進位制數字演示:

public class HappyNum {
    public static void main(String[] args) {
        int
res = isHappyNum(100); System.out.println(res); } public static int isHappyNum(int num){ int res = 0;// 最終的返回值 if (num / 100 > 9 || num == 0) { System.out.println("引數必須是十進位制三位數!"); return res; } int unitsDigit = num %100%10;// 個位數 int
tensDigit= num%100/10;// 十位數 int hundredsDigit = num/100;// 百位數 int sum = unitsDigit*unitsDigit+tensDigit*tensDigit+hundredsDigit*hundredsDigit; if(sum == 1){ res = 1;// 確認是快樂數,返回1 }else if(sum ==4){ res = -1;// 確認是非快樂數,返回-1 }else{ return
isHappyNum(sum);// 未得到確切結果,進行遞迴處理。* } return res; } }

junit測試程式碼:

public class HappyNumTest {
    @Test
    public void testIsHappyNum() {
        int res1 = HappyNum.isHappyNum(7);
        int res2 = HappyNum.isHappyNum(32);
        int res3 = HappyNum.isHappyNum(97);
        int res4 = HappyNum.isHappyNum(100);
        int res5 = HappyNum.isHappyNum(0);
        int res6  = HappyNum.isHappyNum(1000);

        assertEquals(1, res1);
        assertEquals(1, res2);
        assertEquals(1, res3);
        assertEquals(1, res4);
        assertEquals(0, res5);
        assertEquals(0, res6);
    }
}

測試結果:
這裡寫圖片描述

總結:

關於快樂數的程式碼,關鍵是取出數字每位上的數,進行計算後進行分支判斷,以及方法的遞迴呼叫。

程式碼當中標註“*”星號的位置如果不加return的話就不能正確的返回結果,必須要加上return,這個問題我暫時還沒想出原因。