【C语言】找水仙花数

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

“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=13+53+3^3,则153是一个“水仙花数”。

分析:
1.找出数字位数——%10,循环
2.把数字中的每个数分离出来,给平方,在加和(这堆过程合在一块)
3.打印筛出来的水仙花数

代码实现:

#include<stdio.h>
#include<math.h>
int main()
{
	int tool = 0;//为了保留num的值,便于值的变化
	int num = 0;//要排查判断的数
	int count = 1;//数的位数
	int sum = 0;//数字平方后的加和
	for (num = 0;num < 100000;num++)
	{
		count = 1;//至少是一位数
		tool = num;
		sum = 0;
		while (tool / 10)
		{
			count++;
			tool = tool / 10;
		}
		//以上是确定位数
		tool = num;
		while (tool)
		{	
			sum += pow(tool % 10, count);
			tool = tool / 10;
		}
		//平方加和
		if (num == sum)
		{
			printf("%d ", num);
		}
	}
return 0;	
}

下面是详细分解,和易错细节及总结

1.变量tool的创建意义

在这里插入图片描述
这几个地方,直接用num本尊不可以吗?为啥还弄个tool小弟呢?
把tool去掉

在这里插入图片描述
1.num=num?不好看!逻辑太乱!
2.num=num本身就无法实现数值的转换,用第3.语句为例,如果是一位数,不进它上一个while循环,那num的值没影响,但从10开始,num的值就又成了1,而不是想要的10 第5.num的值也同理

所以,tool变量的意义在于它不仅能数位数,还能在数完位数之后再回到此时循环num的值,它让num的值不用改变,安全的保留

2.每次进行完一个过程要重新赋值

在这里插入图片描述
三个过程:数位数,数字平方加和,打印筛值 是有独立性的,每个过程中都要用本次循环中原始的num值
所以进行完一个过程都要tool=num;来初始化tool

第二个红圈,不能是
tool=num/10
这样写对一位数没有影响,因为它们不进循环,所以运行结果会是 1 2 3 4 5 6 7 8 9

错在哪?num在某次循环中值是不变的,而要求tool每次除10后都去掉一位 必须是tool=tool/10

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值