C之1~100000“水仙花数”与变种水仙花数求解!!!

“水仙花数”

水仙花数,也被称为超完全数字不变数,是自幂数中的一种,网上很多小伙伴都把非三位的水仙花数,也叫做水仙花数,其实是不对的哦(点这里就知道为啥不对了:关于水仙花数定义

声明,网上有小伙伴将c语言库函数中pow函数返回值直接与int类型相比,或者接收,其实是不对的哦,因为在MSDN中pow的解释下图示:
在这里插入图片描述
好了,你我们上手代码吧

#include<stdio.h>
//此函数实现x^y功能
int My_Pow(int x, int count)
{
	int Mul = 1;
	while(count--)
		Mul *= x;
	return Mul;

}
int main()
{
	int i;
	//产生1 ~ 100000数字
	for (i = 0; i <= 100000; i++)
	{
		//sum 中存放所得各位相应的次幂之和
		int sum = 0;
		int count = 0;
		//判断位数(就是有几位数字)
		//通过计数器来实现
		int tmp = i;//临时变量不改变原值
		while(tmp)
		{
			count++;
			tmp /= 10;
		}
		//sum 中存放所得各位相应的次幂之和
		tmp = i;
		while(tmp)
		{
			sum += My_Pow(tmp % 10, count);
			tmp /= 10;
			//当然这边你也可以使用库函数 并用强制类型转换符(int)就可以啦
		}
		//判断是否满足“水仙花数”定义
		if ( i == sum)
		{
			printf("%d ",i);
		}
	}

	return 0;
}

变种水仙花数

题目描述:变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数
字,比如1461 可以拆分成(1461,1461,1461),如果所有拆分后
的乘积之和等于自身,则是一个Lily Number。
例如:

655 = 6 * 55 + 65 * 5

1461 = 1*461 + 14*61 + 146*1

题目链接:BC38变种水仙花
那我们在这里求十万以下的变种水仙花数

#include<stdio.h>
int main()
{
	int i;
	for (i = 101; i <= 99999; i++)
	{
		//如655 = 6 * 55 + 65 * 5 
		// (655 / 100)*(655 % 100) + (655 / 10) * (655 % 10)

		//又如1461 = 1*461 + 14*61 + 146*1
		//(1461 /1000)*(1461 % 1000) +(1461 / 100)*(1461 % 100) 
		//+(1461 / 10)*(1461 % 10) 
		//我们发现其实就是完成  除和取余操作 
		//其中变种水仙花数跟位数有关
		int sum = 0;
		int j = 10;
		int tmp = i;
		//完成拆分动作
		for (;j <= i; j *= 10)
		{
			sum += (tmp % j) * (tmp / j);
		}
		//判断是否为变种水仙花数
		if (sum == i)
			printf("%d ",i);
	}
	return 0;
}

本文如有不妥之处,还请各位不吝斧正!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值