目录
前言
求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
水仙花数就是的自幂数。
思路
判断一个数i是不是水仙花数:
1 计算i的位数n
2 计算i的每一位数的n次方之和
3 判断
分析
先生成1-100000,之间的所有数
int i = 0;
for (i = 0; i <= 100000; i++)
在计算数字i的位数,这里我们以123为例:
round 1 | round 2 | round 3 | round 4 |
tmp = 123 | tmp = 12 | tmp = 1 | tmp = 0 |
tmp = 12 | tmp = 1 | tmp = 0 | |
n = 1 | n = 2 | n = 3 |
int n = 0;
int tmp = i;
while (tmp)
{
tmp = tmp / 10;
n++;
}
计算i的每一位n次方之和,用到的是函数pow(),第一个参数是底数,第二个参数是指数。注意在使用pow()时,要引用头文件#include<math.h>,否则就是未定义函数。
int sum = 0;
int m = i;
while (m)
{
sum += pow(m % 10, n);
m = m / 10;
}
最后判断一下,很简单。
if (sum == i)
{
printf("%d ", sum);
}
完整代码展示
#include<stdio.h>
#include<math.h>
int main()
{
//求出0~100000之间的所有“水仙花数”并输出。
int i = 0;
for (i = 0; i <= 100000; i++)
{
//1 计算i的位数n
int n = 0;
int tmp = i;
while (tmp)
{
tmp = tmp / 10;
n++;
}
//2 计算i的每一位n次方之和
int sum = 0;
int m = i;
while (m)
{
sum += pow(m % 10, n);
m = m / 10;
}
//3 判断
if (sum == i)
{
printf("%d ", sum);
}
}
return 0;
}
结束语:
短期训练很累,但是一定有效。