C语言求1到10000的水仙花数

定义:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。                     

这里我们认为n位数中,只要每位的n次方等于该数,该数便是一个水仙花数。

求解思路:1.由于不知道有几位数,所以首先我们先求出n位数确定的位数

                    2.在求余算出n位数的余数之后,利用pow(m,n)求m的n次方函数算出每位数的n次方

                    3.将每位数的n次方相加,判断是否等于该数;如果相等,则是水仙花数,否则不是

//水仙花数:n位数每位数的n次方等于该数
#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
#include 
int main()
{
	int i = 1;
    //求1到10000的水仙花数
	for (i = 1; i <= 10000; i++)
	{
		int count = 1;    //水仙花数至少是一位
		int tmp = i;
		int sum = 0;
		//1.判断位数
		while (tmp / 10)  
		{
			count++;
			tmp = tmp / 10;
		}
		tmp = i;   //while循环后已改变tmp值,所以tmp需要重新被赋值
		//2.求和
		while (tmp)    //保证最高位的n次方不被丢掉
		{
			sum += pow(tmp % 10, count);    //pow(float x,float y):求次方函数(x的y次方)
			tmp = tmp / 10;
		}
		if (i == sum)
		{
			printf("%d ", i);
		}
	}
	system("pause");
	return 0;
}

 

你可能感兴趣的:(C语言)