目录
1.问题
2.问题求解及代码实现
1.问题描述
求出0~100000之间的所有“水仙花数”并输出。“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如 : 153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。
2.问题求解及代码实现
首先严格意义上的水仙花数应该是一个三位数,这里的“水仙花数”范围为0~100000,这就给我们加大了难度,我们想要求解各位数的n次方之和的话,我们需要首先求解这个数是个几位数,我们使用下面的代码简单实现:
while (w > 0)
{
w /= 10;
i++;
}
这样就可以求得一个数w的位数i,接下来为了代码简洁易懂,我们编写一个函数求解一个数的n次方的值,代码如下:
int x(int a,int b)
{
int g = 0;
int sum = 1;
for (g = 0; g < b; g++)
{
sum *= a;
}
return sum;
}
之后我们将一个n位数的每一位都剥离出来,使用上述函数求得每一位的n次方的值,最后再累加起来,若累加起来的值等于这个数本身,我们则称之为”水仙花数“,并将之打印。完整代码如下:
int x(int a,int b)
{
int g = 0;
int sum = 1;
for (g = 0; g < b; g++)
{
sum *= a;
}
return sum;
}
int main()
{
int n = 0;
int y = 0;
int z = 0;
int j = 0;
int w = 0;
for (n = 0; n <= 100000; n++)
{
int i = 0;
int m = 0;
y = n;
z = n;
w = n;
while (w > 0)
{
w /= 10;
i++;
}
while (y > 0)
{
j = y % 10;
m += x(j, i);
y/= 10;
}
if (z == m)
printf("%d ", m);
}
return 0;
}
最终打印出的结果为
本文到此结束。感谢大家的阅读,欢迎点赞评论,互关互注,祝大家万事如意。