文章目录
- 一、水仙花数的由来
- 二、基础版水仙花数
- 三、进阶版水仙花数
- 四、高级版水仙花数
本篇主要分析了水仙花数的各种求法。“水仙花数”也叫做“阿姆斯特朗数”,是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个水仙花数,以为153=1³+5³+3³.
一、水仙花数的由来
1、为什么叫水仙花数
经过上面的介绍,都知道了“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。那么为什么会叫“水仙花数”呢?这么好听的名字……
原来,她的兄弟姐妹的名字也个个都好听>>>>>>
三位自幂数:水仙花数
四位自幂数:四叶玫瑰数
五位自幂数:五角星数
六位自幂数:六合数
七位自幂数:北斗七星数
八位自幂数:八仙数
九位自幂数:九九重阳数
十位自幂数:十全十美数
看到这个十全十美数就真的懂了,“水仙花数”果然没叫错。
2、水仙花数的家族
三位的水仙花数共有4个:153,370,371,407;
四位的四叶玫瑰数共有3个:1634,8208,9474;
五位的五角星数共有3个:54748,92727,93084;
六位的六合数只有1个:548834;
七位的北斗七星数共有4个:1741725,4210818,9800817,9926315;
八位的八仙数共有3个:24678050,24678051,88593477
二、基础版水仙花数
1、分析:
(1)因为“水仙花数”是一个三位数,因此可以用3个变量a,b,c来分别表示百位数、十位数、个位数;
(2)准备3个循环来遍历,因为百位数不能是0,所以a从1到9循环;
(3)而十位数和个位数可以是0,所以b、c从0循环到9
2、参考代码:
#include <stdio.h>
#include <math.h>
main()
{
int a, b, c;
printf("水仙花数有:\n");
for(a=1;a<=9;a++)
{
for(b=0;b<=9;b++)
{
for(c=0;c<=9;c++)
{
if(pow(a,3) + pow(b,3) + pow(c,3) == a*100+b*10+c)
{
printf("%5d",a*100+b*10+c);
}
}
}
}
}
三、进阶版水仙花数
1、分析:
(1)利用for循环从100循环到999,对每一个数分解出个位、十位、百位;
(2)然后计算各位数字的立方和,判断立方和是否与该数相等;如果相等就输出该数,即为该“水仙花数”
2、参考代码:
#include <stdio.h>
#include <math.h>
main()
{
int a, b, c, n;
printf("水仙花数有:\n");
for(n=100;n<1000;n++)
{
a= n/100;
b= (n-a*100)/10;
c= n - a*100 - b*10;
if(pow(a,3) + pow(b,3) + pow(c,3) == n)
{
printf("%5d",n);
}
}
}
四、高级版水仙花数
1、万能的分离数的各位:
(1)下面这个程序可以将任意一个整数的每一位数都分离出来
(2)参考代码:
#include <stdio.h>
main()
{
int n, a;
printf("请输入一个整数:");
scanf("%d",&n);
printf("\n%d的每一位数分别是:",n);
while(n!=0)
{
a= n%10;
n= n/10;
printf("%3d",a);
}
}
(3)参考结果:
![分离每一位](https://img-blog.csdnimg.cn/20200331212924205.png)
2、把该方法用到求“水仙花数”上:
#include <stdio.h>
#include <math.h>
main()
{
int a, b, c, n;
printf("水仙花数有:\n");
for(n=100;n<1000;n++)
{
a= n/10/10%10;
b= n/10%10;
c= n%10;
if(pow(a,3) + pow(b,3) + pow(c,3) == n)
{
printf("%5d",n);
}
}
}
3、参考结果:
![水仙花数](https://img-blog.csdnimg.cn/20200331213139457.png)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)