三位水仙花数

1,950 阅读1分钟

“水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身。‪‬‪

‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬ 例如:

  • ABC是一个"3位水仙花数”,则:A的3次方+B的3次方+C的3次方 = ABC。
#include <stdio.h>
#include <math.h>

//第一种方法
#if(0)
void main()
{
	int i , j;
	for(i = 100; i<=999; i++)
	{
		j = pow(i / 100, 3) + pow(i / 10 % 10 , 3) + pow(i % 10 , 3);
		if(j == i)  printf("%d\t",i);
	}
}
#endif

//第一种方法的缩小版
#if(0)
void main()
{
	int i , j;
	for(i = 100; i<=999; i++)
	{
		if((pow(i / 100, 3) + pow(i / 10 % 10 , 3) + pow(i % 10 , 3)) == i)  printf("%d\t",i);
	}
}
#endif

//第一种方法的扩大版
int main()
{
	int i, a, b, c, n;
	
	printf("1000以内的水仙花数:");
	for(n = 1; n<=1000; n++)
	{
		a = n/100;      //百位
		b = n/10%10;    //十位         或者b=n%100/10
		c = n%10;       //个位
		if(pow(a, 3)+pow(b, 3)+pow(c, 3) == n)
		{
			printf("%d\t", n);
		}	
	}
	
	return 0;
}

//第二种方法
int main()
{
	int a, b, c, s;
	
	for(a = 1; a<10; a++)
	{
		for(b = 0; b<10; b++)
		{
			for(c = 0; c<10; c++)
			{
				s = a*100+b*10+c;
				if(s == pow(a, 3)+pow(b,3)+pow(c,3))  //好习惯【将数值放到等号的左边】 
				{
					printf("%d\t", s);
				}
			}
		}
	}
	
	return 0;
}

pow(x,y):

数学函数,表示x的y次方,使用此函数必须加头文件#include <math.h>