2.3 自方冪數(shù)
一個n位正整數(shù)如果等于它的n個數(shù)字的n次方和,該數(shù)稱為n位自方冪數(shù)。
三位自方冪數(shù)又稱水仙花數(shù)。
四位自方冪數(shù)又稱玫瑰花數(shù)。
五位自方冪數(shù)又稱五角星數(shù)。
六位自方冪數(shù)又稱六合數(shù)。
試求出所有3~6位自方冪數(shù)。
2.3.1 三位水仙花數(shù)
1、算法分析
求自方冪數(shù)采用窮舉判定法。求n位自方冪數(shù),對所有n位整數(shù)一 一判定,如果其數(shù)字的n次方和等于它自身,則打印輸出。
求n個數(shù)字的n次方和,常見有以下兩種方法:
1)設置n重循環(huán),每位數(shù)設置循環(huán);位從1~9,其余各位數(shù)從0~9。n個數(shù)字的n次方的和即n個循環(huán)變量的n次方和。
2)從最小的n位數(shù)至的n位數(shù)循環(huán),對每一個n位數(shù)分離其各個數(shù)字,然后求數(shù)字的n次方和。
兩種方法從循環(huán)次數(shù)來說是一樣的,前者實施起來較為簡便。
程序代碼如下:
#include
void main()
{
int i,j,k,m1,m2;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
{
m1=i*100+j*10+k; /*m1為三個數(shù)字分別為i,j,k的三位數(shù)*/
m2=i*i*i+j*j*j+k*k*k; /*m2為三個數(shù)字的立方和*/
if(m1==m2) printf("%3d ",m1); /*輸出滿足水仙花條件的數(shù)*/
}
printf("\n");
}
程序運行結(jié)果:
水仙花數(shù)有:
153 370 371 407
一個n位正整數(shù)如果等于它的n個數(shù)字的n次方和,該數(shù)稱為n位自方冪數(shù)。
三位自方冪數(shù)又稱水仙花數(shù)。
四位自方冪數(shù)又稱玫瑰花數(shù)。
五位自方冪數(shù)又稱五角星數(shù)。
六位自方冪數(shù)又稱六合數(shù)。
試求出所有3~6位自方冪數(shù)。
2.3.1 三位水仙花數(shù)
1、算法分析
求自方冪數(shù)采用窮舉判定法。求n位自方冪數(shù),對所有n位整數(shù)一 一判定,如果其數(shù)字的n次方和等于它自身,則打印輸出。
求n個數(shù)字的n次方和,常見有以下兩種方法:
1)設置n重循環(huán),每位數(shù)設置循環(huán);位從1~9,其余各位數(shù)從0~9。n個數(shù)字的n次方的和即n個循環(huán)變量的n次方和。
2)從最小的n位數(shù)至的n位數(shù)循環(huán),對每一個n位數(shù)分離其各個數(shù)字,然后求數(shù)字的n次方和。
兩種方法從循環(huán)次數(shù)來說是一樣的,前者實施起來較為簡便。
程序代碼如下:
#include
void main()
{
int i,j,k,m1,m2;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
{
m1=i*100+j*10+k; /*m1為三個數(shù)字分別為i,j,k的三位數(shù)*/
m2=i*i*i+j*j*j+k*k*k; /*m2為三個數(shù)字的立方和*/
if(m1==m2) printf("%3d ",m1); /*輸出滿足水仙花條件的數(shù)*/
}
printf("\n");
}
程序運行結(jié)果:
水仙花數(shù)有:
153 370 371 407