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;
}