变种水仙花数 - Lily Number

一、先了解水仙花数

在了解变种水仙花数之前我们先了解一下“水仙花数”。“水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。”

那么100 ——999之间的水仙花数都有哪些呢?

1.首先我们分析一下,判断一个数n是不是水仙花数,我们需要对该数字n进行拆分,拆出该数字n的个位数、十位数、以及百位数。

2.拆分方法:

        个位数:n%10

        十位数:n/10%10

        百位数:n/10

3.判断:如果n的个位数,十位数,百位数的三次方相加等于n,那么该数就是水仙花数。

也可用函数库中的pow()函数,别忘记引用头文件“math.h”。

n == a * a * a + b * b * b + c * c * c

n == pow(a, 3) + pow(b, 3) + pow(c, 3)

4.实现代码

#include<stdio.h>
#include"math.h"
int main()
{
	printf("100到999之间的水仙花数:  \n");
	int n, a, b, c;
	for (n = 100; n <= 999; n++) //水仙花数的取值范围
	{
		int a = n % 10;//个位数 
		int b = (n / 10) % 10;//十位数 
		int c = n / 100;//百位数 
        //判断个位、十位、百位的立方和是否与原数n相等
		if (n == pow(a, 3) + pow(b, 3) + pow(c, 3))
			printf("%d ", n);
		//if (n == a * a * a + b * b * b + c * c * c) //
		//	printf("%d ", n);
	}

	return 0;
}

运行结果: 

 二、变种水仙花数

1.什么是变种水仙花数?

变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461), (14和61), (146和1), 如果所有拆分后的乘积之和等于自身,则是一个Lily Number。l例如:655 = 6 * 55 + 65 * 5
           1461 = 1 * 461 + 14 * 61 + 146 * 1 

2.五位数中的变种水仙花数都有哪些呢。

根据对变种水仙花数的了解,我们可以得知,五位数12345我们可以拆分成:

1*2345   12 *345  123*45   1234*5四部分,不难发现,还是拆分。定义四个部分分别为a,b,c,d

a = (i / 10000) * (i % 10000); //  1*2345

b = (i / 1000) * (i % 1000);  //  12 *345 

c = (i / 100) * (i % 100);//  123*45

d = (i / 10) * (i % 10);//  1234*5

3.判断拆分后的乘积之和是否等于自身

i == a+b+c+d

4.实现代码

#include<stdio.h>
int main() {
	int i = 0;
	printf("变种水仙花数:");
	for (i = 10000; i < 99999; i++)
	{
		//12345   
		int a = (i / 10000) * (i % 10000);//1 * 2345
		
		int b = (i / 1000) * (i % 1000); // 12 * 345
		
		int c = (i / 100) * (i % 100); // 123 * 45

		int d = (i / 10) * (i % 10); //1234 * 5 
		int sum = a + b + c + d;
		if (i == sum) //判断拆分后乘积之和是否等于自身
		{
			printf("%d ", i);

		}
	}
	return 0;
}

运行结果:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值