C语言:输出水仙花数

水仙花数:

阿姆斯特朗数 俗称水仙花数 ,它是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。

算法思想:

根据水仙花数的定义,要想找出水仙花数,首先要明确该数字有几位数,即n的取值,其次要分离出各位上的数字,求出各位数字的n次方,并将其相加。如果这个和等于这个数本身,则这个数为水仙花数,并将其打印。

代码实现:

(以范围为0~100000为例)

#include          
int power(int n, int k)
{
	if (k == 0)
		return 1;
	else if (k == 1)
		return n;
	else
		return n * power(n, (k - 1));
}
int main()
{
	int num = 0;
	int sum = 0;
    for(num=0;num<=100000;num++)
	{
		int n = num;
		int m = 0;
		int k = 0;

		while (n)
		{
			n = n / 10;
			k++;
		}
		n = num;
		sum = 0;
		while(n)
		{
		    m = n % 10;
			sum += power(m , k);
			n = n / 10;
		}
		if (sum == num)
			printf("%d ", num);
	}
	return 0;
}

上述是对输出水仙花数的一个简单的代码实现,为了使其更具有交互性,我们可以优化代码,输入取值范围,示例如下:

#include          
int power(int n, int k)
{
	if (k == 0)
		return 1;
	else if (k == 1)
		return n;
	else
		return n * power(n, (k - 1));
}
int main()
{
	int num = 0;
	int sum = 0;
	int start, end = 0;
	scanf("%d %d", &start, &end);
    for(num=start;num<=end;num++)
	{
		int n = num;
		int m = 0;
		int k = 0;

		while (n)
		{
			n = n / 10;
			k++;
		}
		n = num;
		sum = 0;
		while(n)
		{
		    m = n % 10;
			sum += power(m , k);
			n = n / 10;
		}
		if (sum == num)
			printf("%d ", num);
	}
	return 0;
}

总结:

我本人在实际操作中犯了一些小错误,每次得到的sum的值都是前面几次循环的总和,导致只能输出0和1。在经过一番调试之后,发现了这个错误,并及时改正得到正确的结果。由此可见,调试对于我们发现错误是多么重要的一个环节。

另外,不知该程序是否为最优,如有可以优化的环节,希望各位同仁可以指出,以便我及时更正优化。

你可能感兴趣的:(c语言,开发语言,windows,visual,studio,算法)