变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。
例如:
655 = 6 * 55 + 65 * 5
1461 = 1*461 + 14*61 + 146*1
求解过程:
我们可以用for循环来获取10000~~99999的数字,然后在每一次循环中调用一个函数来判断该数字是否为 变种水仙花数。具体过程如下:
因此,只要设计好Funct()函数就可以解决该问题了。
再设计该函数之前,来认识一个函数——pow(x,y)函数,其作用是求x的y次方,它的头文件是<math.h>。如:
如1461 = 1*461 + 14*61 + 146*1,1可以看成是1461%(10^1)得到,146看成是1461/(10^1)得到,61是1461%(10^2)得到,14是1461/(10^2)得到,则认为一个数n, n%(10^k)×n/(10^k)——>(k=1,2,3...),令k=1,k=2,k=3,k=4都计算一次,将所得到的数全部相加起来,看是否与原本的n相等。如果相等,则证明n是变种水仙花数;反之,则不是变种水仙花数。
Funct()函数的具体设计如下:
这样,整体的代码也基本写好了,下面是整个代码的实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int Funct(int n)
{
int a, b,c;
int sum = 0;
int k = 1;
while (k<5)
{
c = pow(10, k);
a = n % c;
b = n / c;
sum += (a * b);
k++;
}
return sum;
}
int main()
{
int i = 0;
for (i = 10001; i < 99999; i++)
{
int ret=Funct(i);
if (ret == i)
{
printf("%d ", i);
}
}
return 0;
}