前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言:输出水仙花数

C语言:输出水仙花数

作者头像
P_M_P
发布2024-01-18 18:59:06
1660
发布2024-01-18 18:59:06
举报
文章被收录于专栏:C语言P_M_P学习笔记

水仙花数:

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

算法思想:

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

代码实现:

(以范围为0~100000为例)

代码语言:javascript
复制
#include<stdio.h>          
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;
}

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

代码语言:javascript
复制
#include<stdio.h>          
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。在经过一番调试之后,发现了这个错误,并及时改正得到正确的结果。由此可见,调试对于我们发现错误是多么重要的一个环节。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 水仙花数:
  • 算法思想:
  • 代码实现:
  • 总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档