題目連結:
題目意譯:
給定一整數 n ,撰寫一個函式去判斷該數是否為 3 的冪次。
進階:
你可以在不使用任何迴圈、遞迴結構下做出來嗎?
範例測資:
範例 1:
輸入: 27
輸出: true
範例 2:
輸入: 0
輸出: false
範例 3:
輸入: 9
輸出: true
範例 4:
輸入: 45
輸出: false
解題思維:
如果單純使用迴圈或是遞迴結構,則當 n 是 3 的倍數(這邊的前提是 n > 0),會將數字 n 除以 3 然後重複直到 n 不是 3 的倍數。此時如果 n = 1 則代表其為 3 的冪次;反之,則不是。
反過來想,因為 n 的型態是一個 32 位元有號整數,因此它會是 3 的冪次只有以下 20 種情形:
1
3
9
27
81
243
729
2187
6561
19683
59049
177147
531441
1594323
4782969
14348907
43046721
129140163
387420489
1162261467
其中,最大的是 1162261467 這個數字,而比它小的冪次都會整除它。
因此,我們可以將此函式直接寫成一個短短的判斷式:
(n > 0) && (1162261467 % n == 0)
其中「%」代表取餘的操作。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。