【C语言学习————打印水仙花数】

问题:求出0~100000之间的所有“水仙花数”并输出。


文章目录

  • 一、什么是水仙花数
  • 二、算法原理
  • 三、算法实现
  • 四、完整代码
  • 总结


一、什么是水仙花数

水仙花数(Narcissistic number)是指一个n位数 (n≥3),它的每个位上的数字的n次幂之和等于它本身。例如153就是一个水仙花数,因为153=1^3+5^3+3^3。水仙花数是自恋数(Self number)的一种,是数字计算中的一种有趣现象。

二、算法原理

要实现水仙花数的打印,第一步是先计算出该数几个几位数,然后再通过判断是否是水仙花数,最后再进行输出。

三、算法实现

1.首先求出位数

【C语言学习————打印水仙花数】_第1张图片

代码解析:第一行是定义一个n用来存放位数的值,最小的位数是一位数,m是用来储存i的值,防止i的值发生变化。

while(m>9)对m的值进行判断,m/=m——m每除一个10就代表多一位数,n++表示位数加一

每除一个十就多一位。

2.计算水仙花数

int sum = 0;
		m = i;
		while(m)
		{
			sum = sum + pow(m%10,n);
			m = m / 10;
		}

代码解析:对于水仙花数,首先定义一个sum来储存水仙花数的值,同样通过m来保存i的值防止i的值发生改变。

pow(x,y)函数是求x的y次方的值,这里使用pow来计算每一位数n次方的和(水仙花数的定义)由此来保存水仙花数的值,然后再对m/0求下一位数。

3.判断水仙花数

if (sum == i)
        {
            printf("%d\t", i);
        }

通过判断sum和i的值相同与否,来判断i中的水仙花数,相同则输出,不同继续循环。

四、完整代码

int main()
{
	int i=0,tmp=0;
	for (i=1;i <= 100000;i++)
	{
		int n = 1;
		int m = i;
		while(m > 9)
		{
			m = m / 10;
			n++;
		}
		int sum = 0;
		m = i;
		while(m)
		{
			sum = sum + pow(m%10,n);
			m = m / 10;
		}
		if (sum == i)
		{
			printf("%d\t", i);
		}
	}
	return 0;
}

总结

以上就是对1-100000之间的水仙花数的打印问题的代码及解析,若对你有帮助的话请动手点点关注,如果有写错的请指出,谢谢

你可能感兴趣的:(C语言,学习,c语言,算法)