如何用C语言完成水仙花数的搜索

如何用C语言完成水仙花数的搜索

概念讲解:
什么是水仙花数呢?
所谓的水仙花数是指:一个n 位数( n≥3 ),它的每个位上的数字的n 次幂之和等于它本身。 例如153,370,371等都是水仙花数,就拿153来说,153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3

代码思路

  1. 为了搜索指定范围的所有水仙花数,最好的办法当然是遍历啦,因此,编写代码的第一步就是确定使用for循环实现对目标范围所有数字的遍历
  2. 根据水仙花数的概念,我们必须确定当前数字的位数,这样才能确定每一位上的数字应该用几次方来求和
    例如:153的位数为3;370的位数为3;1634的位数为4;
  3. 确定好当前数字的位数后,则需要求出来当前数字的每一位上都是几
    例如:153的每一位上的数字分别为1、5、3;370的每一位上的数字分别为3、7、0;
  4. 知道当前数字的位数,以及每一位上的数字分别是什么后,剩下的就剩下求和了
    例如: 153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3; 370=3 * 3 * 3+7 * 7 * 7+0 * 0 * 0;
    1634=1 * 1 * 1 * 1+6 * 6 * 6 * 6+3 * 3 * 3 * 3+4 * 4 * 4 * 4;
  5. 将最终的求和结果和当前数字进行比较,如果相等,则为水仙花数,如果不是,那进行下一个数字的判断,直到遍历所有待求范围的数字

具体代码

#include<stdio.h>
//水仙花数
//1.确定位数
//2.确定每个数字
//3.判断
int pow(int number, int times) //自定义函数求number的times次方
{
	int result = 1;
	for (int i = 0; i < times; i++)
	{
		result *= number;
	}
	return result;
}
int main() 
{
	for (int i = 100; i <= 100000; i++)//查找范围
	{
		//判断位数
		int count = 1;
		int sum = 0;
		int tem = i;
		while (tem / 10)
		{
			count++;
			tem /= 10;
		}
		//确定每一位的值,求count次方后,累加起来
		tem = i;
		for (int j = 0; j < count; j++)
		{
			sum += pow(tem % 10, count);
			tem /= 10;
		}
		//判断累加和是否与当前数字相同,相同则为水仙花数,将其打印出来
		if (sum == i) {
			printf("当前水仙花数为:%d \n", i);
		}
	}
	
	return 0;
}

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值