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

  • Post author:
  • Post category:其他



“水仙花数”


水仙花数

,也被称为超完全数字不变数,是

自幂数

中的一种,网上很多小伙伴都把非三位的水仙花数,也叫做水仙花数,其实是不对的哦(点这里就知道为啥不对了:

关于水仙花数定义

声明,网上有小伙伴将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;
}

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



版权声明:本文为MerryMaking7946原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。