题目:首先,分析题目理解什么是水仙花数,然后根据定义分析其中的变量有两个,一个是该数的位数,一个是该数字每一位的数字。所以,我们的任务就有两个,1.求出该数有几位。2,求出该数上的每一位数字。
- 求出该数有几位
以153为例,153/10=15;15/10=5;5/10=0;当余数为0的时候,正好做了3次除法运算,利用一个count在循环中计数即可。实现代码如下:
到这里有一个问题,就是只要走出while循环,那么i的值就是0;这对我们后面要进行的比较打印操作是非常不利的,所以在这里我们就要找一个替罪羊temp;把i的值赋给temp,让temp去进行操作。
- 找到该数的每一位(这是常规操作,只需要对一个数不断/10再%10就可以了)
还是以153为例,153%10,得到个位,153/10得到前两位;15%10得到十位,15/10得到第一位;
总体代码如下:
#include <stdio.h>
#include <math.h>
void Func()
{
for (int i = 0; i < 1000000; i++)
{
int count = 0;
int temp = i;
//1.找到该数共有几位
while (temp != 0)
{
count++;
temp/= 10;
}
temp = i;
int sum = 0;
//2.找到该数的每一位
while (temp != 0)
{
sum += pow(temp % 10, count);
temp /= 10;
}
if (i == sum)
{
printf("%d\n ", i);
}
}
}
int main()
{
Func();
return 0;
}