文章目录
- 一、题目
- 二、思路
- 三、代码实现
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目
二、思路
此题的关键在于只要知道判断一个数据是否为水仙花数的方式,问题就迎刃而解。假定给定一个数据data,具体检测方式如下:
第一步
- 求取data是几位数?
- 首先输入一个数肯定最低都是个位数。然后怎么获取位数呢
- 假设我们要确定1234是不是水仙花数,首先1234 / 10 = 123 ,这里去除掉一位了,然后123 / 10 = 12,然后又去掉一位了。12 / 10 = 1,然后又去掉一位了,1 / 10 = 0,此时去掉所有位了。
- 上面确定了怎么去除位数,在这里我们可以在去除位数的时候增加一个计数器,每次去掉一个位计数一次。
第二步
- 获取data中每个位置上的数据,并对其进行立方求和
- 此处用到pow函数,pow(n,m)表示n的m次方,pow函数的头文件位math.h ,使用前需加上头文件
第三步
对data中每个位上的数据立方求和完成后,在检测其结果是否与data相等即可,
相等:则为水仙花数
否则:不是
三、代码实现
#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
for(i=0; i<=99999; i++)
{
int count = 1;
int tmp = i;
int sum = 0;
//判断i是否为水仙花数
//1. 求判断数字的位数
while(tmp/10)
{
count++;
tmp = tmp/10;
}
//2. 计算每一位的次方和
tmp = i;
while(tmp)
{
sum += pow(tmp%10, count);
tmp = tmp/10;
}
//3. 判断
if(sum == i)
printf("%d ", i);
}
return 0;
}