C語(yǔ)言水仙花數(shù)
問(wèn)題描述
輸出所有的“水仙花數(shù)”,所謂的“水仙花數(shù)”是指一個(gè)三位數(shù)其各位數(shù)字的立方和等于該數(shù)本身,例如153是“水仙花數(shù)”,因?yàn)椋?53 = 13 + 53 + 33。
問(wèn)題分析
根據(jù)“水仙花數(shù)”的定義,判斷一個(gè)數(shù)是否為“水仙花數(shù)”,最重要的是要把給出的三位數(shù)的個(gè)位、十位、百位分別拆分,并求其立方和(設(shè)為s),若s與給出的三位數(shù)相等, 三位數(shù)為“水仙花數(shù)”,反之,則不是。
算法設(shè)計(jì)
“水仙花數(shù)”是指滿(mǎn)足某一條件的三位數(shù),根據(jù)這一信息可以確定整數(shù)的取值范圍是 100〜999。對(duì)應(yīng)的循環(huán)條件如下:
for(n=10; n<1000; n++)
{
//......
}
對(duì)代碼的說(shuō)明:
將n整除以100,得出n在百位上的數(shù)字hun。
將(n-i*100)整除以10(或?qū)先整除以10再對(duì)10求模n/10%10),得出n在十位上的數(shù)字ten。
將n對(duì)10取余,得出n在個(gè)位上的數(shù)字ind。
求得這三個(gè)數(shù)字的立方和是否與其本身相等,若相等,則該數(shù)為水仙花數(shù)。
對(duì)于每個(gè)位置上的數(shù)值將其拆分的算法有很多種,根據(jù)不同情況選擇不同算法(對(duì)于同一問(wèn)題不同算法的效率有時(shí)會(huì)相差很多)。
下面是完整的代碼:
#include <stdio.h>
int main()
{
int hun, ten, ind, n;
printf("result is:");
for( n=100; n<1000; n++ ) /*整數(shù)的取值范圍*/
{
hun = n / 100;
ten = (n-hun*100) / 10;
ind = n % 10;
if(n == hun*hun*hun + ten*ten*ten + ind*ind*ind) /*各位上的立方和是否與原數(shù)n相等*/
printf("%d ", n);
}
printf("\n");
return 0;
}</stdio.h>
運(yùn)行結(jié)果:
result is:153 370 371 407
作者:大學(xué)生新聞網(wǎng) 來(lái)源:大學(xué)生新聞網(wǎng)
發(fā)布時(shí)間:2025-03-11 閱讀:
- C語(yǔ)言求回文數(shù)
- 將數(shù)組中元素重新組合成一新數(shù)。拆分時(shí)變量a的最高位仍然存儲(chǔ)在數(shù)組中下標(biāo)最大的位置
- 03-11 關(guān)注:0
- C語(yǔ)言水仙花數(shù)
- 輸出所有的“水仙花數(shù)”,所謂的“水仙花數(shù)”是指一個(gè)三位數(shù)其各位數(shù)字的立方和等于該數(shù)本身,例如153是“水仙花數(shù)”,因?yàn)椋?53 = 13
- 03-11 關(guān)注:0
- C語(yǔ)言求親密數(shù)
- 如果整數(shù)A的全部因子(包括1,不包括A本身)之和等于B;且整數(shù)B的全部因子(包括1,不包括B本身)之和等于A
- 03-11 關(guān)注:0
- C語(yǔ)言求完數(shù)(完全數(shù))
- 如果一個(gè)數(shù)等于它的因子之和,則稱(chēng)該數(shù)為“完數(shù)”(或“完全數(shù)”)。例如,6的因子為1、2、3,而 6=1+2+3,因此6是“完數(shù)”。
- 03-11 關(guān)注:1