求出0 999之間的所有「水仙花數」並輸出

2021-08-28 17:48:43 字數 1483 閱讀 2083

題目:求出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 是...