自己编的c语言水仙花数

2025-04-25 09:24:15
推荐回答(2个)
回答1:

方法:先弄懂什么是水仙花数::
水仙花数是指一个n(>=3)位数字的数,它等于每个数字的n次幂之和。
3位水仙花数————先定义3个数其中一个为1--9;2个为0--9;(用for循环)
再用如果a定义为1--9那么用100*a来表示百位;如果b或者c定义是0--9那么用10*b或者10*c来表示十位;那么下面用c或者b来表示个位;
if(100*a+10*b+c==a*a*a+b*b+c)
如果满足这个条件那么:输出的printf("%d%d%d",a,b,c)就是3位数的水仙花数:
4位水仙花数方法同上:
刚写的:调试过了
#include

int
main(void)
{
int
a,b,c,d;
system("cls");
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
if(100*a+10*b+c==a*a*a+b*b*b+c*c*c)
printf("%d%d%d\n",a,b,c);
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
for(d=0;d<=9;d++)
if(1000*a+100*b+10*c+d==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
printf("%d%d%d%d\n",a,b,c,d);
getch();
}
或者这样:
#include

int
main(void)
{
int
a,b,c,d;
system("cls");
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
{
if(100*a+10*b+c==a*a*a+b*b*b+c*c*c)
printf("%d%d%d\n",a,b,c);
for(d=0;d<=9;d++)
if(1000*a+100*b+10*c+d==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
printf("%d%d%d%d\n",a,b,c,d);
}
getch();
}
求采纳为满意回答。

回答2:

#include
void
main()
{
int
a,b,c,number;
for(number=2;number<=999;number++)
{
a=number/100;
b=number/10-10*a;
c=number-100*a-10*b;
if(number==a*a*a+b*b*b+c*c*c)
printf("%d\t",number);
}
}
里面的a=number/100;
b=number/10-10*a;
c=number-100*a-10*b;
的不是很明白?
程序解释:
a=number/100;这句用来取number的百位数,既a为百位数字;
b=number/10-10*a;这句指中的number/10指取三位数的前两位(百位和十位),比如一个数123,取前两位得到一个十位数12;后面的"-10*a"指扣去乘以十的百位数位,就是说12-10=2,因此的到的是十位数位;
c的做法也是一样的:用总数扣去(十位数位)*10+(百位数位)*100,得到的是个位数位,于是完成了提取三位数各位数的工作.
不过这个做法的确让人看了不是很明白,我建议用这个方法:
a=number/100%10;
b=number/10%10;
c=number/1%10;