Java程式設計題目-7:快樂數
阿新 • • 發佈:2019-01-04
前天看一個人的筆試經驗提到了程式設計題目:快樂數。快樂數是什麼?快樂數(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);
}
}
測試結果:
總結:
關於快樂數的程式碼,關鍵是取出數字每位上的數,進行計算後進行分支判斷,以及方法的遞迴呼叫。