/*列印出所有的“水仙花數”,所謂“水仙花數”是指一個三位元,其各位元字立方和等於該數本身。例如:153是一個“水仙花數”,因為153=1的三次方+5的三次方+3的三次方由於100 200 300 500 400 整百數都不是水仙花可以直接排除而且 101 為基數的也不是水仙花可以直接排除這樣排除這兩個規律的直接跳過計算*/class Narcissus { /* 開始已耗用時間1524629170834 153 370 371 407 結束已耗用時間1524629170838 耗時:4 因為有18個跳過計算立方的方法避免了計算步驟的冗餘所以運行更快了 */ fun printNarcissus() { for (i in 102..998) { if (i % 100 == 0 || i % 101 == 0) continue val j = i / 100 val k = i / 10 % 10 val z = i % 10 if (i.toDouble() == Math.pow(j.toDouble(), 3.0) + Math.pow(k.toDouble(), 3.0) + Math.pow(z.toDouble(), 3.0)) println(i) } } /** * 傳統演算法運行結果 * * * 開始已耗用時間1524629049929 * 水仙花數是:153 * 水仙花數是:370 * 水仙花數是:371 * 水仙花數是:407 * 結束已耗用時間1524629049949 * 耗時:21 */ fun ss() { for (number in 100..999) { val gewei = number % 10 val shiwei = number / 10 % 10 val baiwei = number / 100 % 10 if (gewei * gewei * gewei + shiwei * shiwei * shiwei + baiwei * baiwei * baiwei == number) { println("水仙花數是:$number") } } }}