“水仙花数”
水仙花数
,也被称为超完全数字不变数,是
自幂数
中的一种,网上很多小伙伴都把非三位的水仙花数,也叫做水仙花数,其实是不对的哦(点这里就知道为啥不对了:
关于水仙花数定义
)
声明,网上有小伙伴将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 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后
的乘积之和等于自身,则是一个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 版权协议,转载请附上原文出处链接和本声明。