C语言求解任意范围内的水仙花数
1. 定义
水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
2. C语言求解
#include <stdio.h>
#include <math.h>
/**
* @author: 张翊
* @TIME: 2021/5/15 15:10
* @Description:
求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
*/
int judge(int);
int main()
{
int max, min;
printf("请输入所求水仙花数的下界(最小值)以及上界(最大值)\n");
scanf("%d %d", &min, &max);
//定义计数器,方便输出使用
int count = 0;
for (int i = min; i <= max; ++i)
{
//计算该数字为几位数
int n = judge(i);
//临时存放n位数字的n次幂之和
int sum = 0;
//临时存放数字的每一位
int temp;
//将当前数字存储到replace,防止循环取模、自除改变i值
int replace = i;
//循环取模、自除求解计算n位数字的n次幂之和
while (replace != 0)
{
temp = replace % 10;
replace = replace / 10;
//调用Math库中的pow方法求解
sum += pow(temp, n);
}
//如果它的每个位上的数字的 n 次幂之和等于它本身,则其为水仙花数,打印
if (sum == i)
{
printf("%5d\t", i);
//每打印一个自增一
count++;
//方便观察,每打印十个换一行
if (count % 9 == 0)
{
printf("\n");
}
}
}
return 0;
}
/**
* 判断一个数字是几位数
* @param i
* @return 数字位数
*/
int judge(int i)
{
int count = 0;
while (i != 0)
{
count++;
i = i / 10;
}
return count;
}
3. 运行结果
4. C语言中的pow函数
头文件:#include <math.h>
pow() 函数用来求 x 的 y 次幂(次方)
其原型为:double pow(double x, double y);
pow()用来计算以x 为底的 y 次方值,然后将结果返回。设返回值为 ret,则 ret = x^y。