先上题目:
求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
此题的关键在于只要知道判断一个数据是否为水仙花数的方式,问题就迎刃而解。假定给定i,具体检测方式如下: 1. 求取i是几位数 2. 获取i中每个位置上的数据,并对其进行次方求和 3. 对i中每个位上的数据次方求和完成后,在检测其结果是否与i相等即可, 4.最后判断是否为水仙花数,求得的次方和i相等就是水仙花数,反之相反。
下面为代码的实现过程:
#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
for(i=0; i<=999999; i++)
{
int count = 1;
int tmp = i;
int sum = 0;
//1. 求判断数字的位数
while(tmp)
{
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;
}
1.第一步为数字位数的判断,通过每次除10对count进行加1,当tmp为0是,跳出while循环,对count的累加即为i的位数。
2.第二步为计算每一位的次方和,这里用到了pow函数来求每一位数的次方,再计算次方的和,下面为pow函数的介绍。
double pow(double x, double y);//函数原型
#include <math.h>//对应头文件
例子:
int a = 0;
a = pow(2,3);//a == 8
3.第三步用分支语句进行判断。(具体分支语句内容可以看这个http://t.csdnimg.cn/BFPEW)
以上就是对水仙花数的全部内容,如果存在错误或者需要补充,欢迎评论区留言讨论。