打印“水仙花数”,变种水仙花数

1.打印"水仙花数"

(1)题目

求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方
之和确好等于该数本身,如:153=13+53+3^3,
则153是一个“水仙花数”。

(2)代码

#include<stdio.h>
#include<math.h>
int main()
{
    
    
	int i = 0;
	for (i = 0; i < 100000; i++)
	{
    
    
		int n = 1;
		int sum = 0;
		//保存i
		int tem = i;
		//判断数字的位数
		while (tem / 10 != 0)
		{
    
    
			++n;
			tem = tem / 10;
		}
		//求每一项n次方的和
		tem = i;
		while (tem != 0)
		{
    
    
			sum += (int)pow((tem % 10),n);
			tem = tem / 10;
		}
		//判断是否为水仙花数
		if (i == sum)
		{
    
    
			printf("%d ", i);
		}
	}
	printf("\n");
	return 0;
}

(3)运行结果

在这里插入图片描述

2.变种水仙花数

(1)题目

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

例如:
655 = 6 * 55 + 65 * 5
1461 = 1461 + 1461 + 146*1

求出5位数中的所有 Lily Number

(2)代码

#include<stdio.h>
int main()
{
    
    
	for (int i = 10000; i <= 99999; i++)
	{
    
    
		int sum = (i % 10) * (i / 10) + (i % 100) * (i / 100) + (i % 1000) * (i / 1000) + (i % 10000) * (i / 10000);
		if (sum == i)
		{
    
    
			printf("%d ", i);
		}
	}
	printf("\n");
	return 0;
}

(3)运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_50886514/article/details/112687995