(篇五)C语言水仙花数的花样求法


本篇主要分析了水仙花数的各种求法。“水仙花数”也叫做“阿姆斯特朗数”,是指一个三位数,其各位数字立方和等于该数本身。例如: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) 
				//pow(a,3)为a的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;  //a,b,c分别为百位、十位、个位上的数;n作为遍历对象	
	printf("水仙花数有:\n");
	for(n=100;n<1000;n++)
	{
		a= n/100;  //取百位上的数赋值给a,多余的数会直接舍去 
		b= (n-a*100)/10;  //取十位上的数,减去百位上的数后除10就是取十位上的数
		c= n - a*100 - b*10;  //减去百位和十位,就只剩下个位上的数了
		if(pow(a,3) + pow(b,3) + pow(c,3) == n) //pow(a,3)为a的3次方 
		{
			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)参考结果:
分离每一位
2、把该方法用到求“水仙花数”上:

#include <stdio.h>
#include <math.h>  //导入数学库,便于次方运算 

main()
{
	int a, b, c, n;  //a,b,c分别为百位、十位、个位上的数;n作为遍历对象	
	printf("水仙花数有:\n");
	for(n=100;n<1000;n++)
	{	
		a= n/10/10%10;  //得到百位,比如234/10/10=2;再2%10=2
		b= n/10%10;  //得到十位
		c= n%10;  //得到个位
		if(pow(a,3) + pow(b,3) + pow(c,3) == n) //pow(a,3)为a的3次方 
		{
			printf("%5d",n);
		}
	}
	
}

3、参考结果:
水仙花数

猜你喜欢

转载自blog.csdn.net/Viewinfinitely/article/details/105232000