如何用C语言完成水仙花数的搜索
概念讲解:
什么是水仙花数呢?
所谓的水仙花数是指:一个n 位数( n≥3 ),它的每个位上的数字的n 次幂之和等于它本身。 例如153,370,371等都是水仙花数,就拿153来说,153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3
代码思路
- 为了搜索指定范围的所有水仙花数,最好的办法当然是遍历啦,因此,编写代码的第一步就是确定使用for循环实现对目标范围所有数字的遍历
- 根据水仙花数的概念,我们必须确定当前数字的位数,这样才能确定每一位上的数字应该用几次方来求和
例如:153的位数为3;370的位数为3;1634的位数为4; - 确定好当前数字的位数后,则需要求出来当前数字的每一位上都是几
例如:153的每一位上的数字分别为1、5、3;370的每一位上的数字分别为3、7、0; - 知道当前数字的位数,以及每一位上的数字分别是什么后,剩下的就剩下求和了
例如: 153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3; 370=3 * 3 * 3+7 * 7 * 7+0 * 0 * 0;
1634=1 * 1 * 1 * 1+6 * 6 * 6 * 6+3 * 3 * 3 * 3+4 * 4 * 4 * 4; - 将最终的求和结果和当前数字进行比较,如果相等,则为水仙花数,如果不是,那进行下一个数字的判断,直到遍历所有待求范围的数字
具体代码
#include<stdio.h>
//水仙花数
//1.确定位数
//2.确定每个数字
//3.判断
int pow(int number, int times) //自定义函数求number的times次方
{
int result = 1;
for (int i = 0; i < times; i++)
{
result *= number;
}
return result;
}
int main()
{
for (int i = 100; i <= 100000; i++)//查找范围
{
//判断位数
int count = 1;
int sum = 0;
int tem = i;
while (tem / 10)
{
count++;
tem /= 10;
}
//确定每一位的值,求count次方后,累加起来
tem = i;
for (int j = 0; j < count; j++)
{
sum += pow(tem % 10, count);
tem /= 10;
}
//判断累加和是否与当前数字相同,相同则为水仙花数,将其打印出来
if (sum == i) {
printf("当前水仙花数为:%d \n", i);
}
}
return 0;
}