題目:求出0~999之間的所有「水仙花數」並輸出
「水仙花數」是指乙個三位數,其各位數字的立方和確好等於該數本身,如;153 = 1^3 + 5^3 + 3^3,則153是乙個「水仙花數」。
/* 在數論中,水仙花數(narcissistic number)也稱為自戀數、自冪數、阿姆斯壯數或阿姆斯特朗數(armstrong number),是指一n位數,其各個數之n次方和等於該數。
例如153、370、371及407就是三位數的水仙花數,其各個數之立方和等於該數:
153 = 1^3 + 5^3 + 3^3。
370 = 3^3 + 7^3 + 0^3。
371 = 3^3 + 7^3 + 1^3。
407 = 4^3 + 0^3 + 7^3。
*/分析:因為水仙花是「三位數」,所以看到此題馬上的思路就是--「列舉」:設立三個for迴圈巢狀,一一試驗三個因子的三次冪相加的和是否滿足等於num;若滿足,則證明是水仙花數。
**:
執行結果:#define _crt_secure_no_warnings 1
#include#include#includevoid fun(int num, int n)
}if (i*i*i + j*j*j + k*k*k == num)//這裡不能直接break,要進行判斷,因為如果不等於num,則還要迴圈檢查其他因子
}if (i*i*i + j*j*j + k*k*k == num)//判斷的原因同理
}}int main()
system("pause");
return 0;
}

從以上結果來看,顯然是有問題的。以118為例,3^3+3^3+4^3=118沒錯,但是不符合每一項的因子都是num各個位(個位,十位,百位)的數,所以這種「列舉」的方法就出錯點就在於:只能判斷相加和是否滿足,但是每一位因子滿足是num的個位數則無法做到。
所以,本題的思路應該是依次取出num各個位(這裡可以參考整數的分解),然後取其三次冪不斷累積相加,判斷和是否滿足與num相等。
**:
執行結果:#define _crt_secure_no_warnings 1
#include#include#includeint fun(int num, int n)
if (sum == num)
else }
int main() }
}

求出0 999之間的所有「水仙花數」並輸出。
水仙花數 是指乙個三位數,其各位數字的立方和確好等於該數本身,如 153 1 5 3 則153是乙個 水仙花數 在數論中,水仙花數 narcissistic number 也稱為自戀數 自冪數 阿姆斯壯數或阿姆斯特朗數 armstrong number 是指一n位數,其各 個數之n次方和等於該數。例...
求出0 999之間的所有「水仙花數」並輸出。
求出0 999之間的所有 水仙花數 並輸出。水仙花數 是指乙個三位數,其各位數字的立方和確好等於該數本身,如 153 1 5 3?則153是乙個 水仙花數 在數論中,水仙花數 narcissistic number 也稱為自戀數 自冪數 阿姆斯壯數或阿姆斯特朗數 armstrong number 是...
求出0 999之間的所有「水仙花數」並輸出
求出0 999之間的所有 水仙花數 並輸出 水仙花數 是指乙個三位數,其各位數字的立方和確好等於該數本身,如 153 1 5 3?則153是乙個 水仙花數 在數論中,水仙花數 narcissistic number 也稱為自戀數 自冪數 阿姆斯壯數或阿姆斯特朗數 armstrong number 是...