在数学领域,水仙花数(也称为自幂数)是指一个n位数(n≥3),它的每个位上的数字的n次方之和等于它本身。例如,对于三位数来说,如果一个数abc
(a、b、c分别代表百位、十位和个位)满足?a^3 + b^3 + c^3 = abc
,那么这个数就被称为“水仙花数”。其中,最常见的就是三位水仙花数,如153就是一个典型的例子,因为1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
。
下面是一个用于判断任意位数是否为水仙花数的C语言程序,但在此例中我们将重点放在三位数上:
#include <stdio.h>
#include <math.h> // 引入 pow 函数库
//判断是否为水仙花数(自幂数)
int main() {
// 遍历1000以内的整数(实际应遍历100至999,这里是演示代码,未做限制)
for (int i = 0; i < 10000; i++)
{
int n = 1; // 初始化位数计数器为1
int tmp = i; // 创建临时变量tmp存储原始数值
int sum = 0; // 初始化各位数字立方和为0
// 计算并更新当前数i的位数
while (tmp /= 10)
{
n++; // 每除以10一次,位数加1
}
// 将tmp恢复为原始数值
tmp = i;
// 计算每位数字的立方和
while (tmp)
{
// 计算tmp的个位数的n次方(这里实际上是计算立方)
sum += pow(tmp % 10, n);
tmp /= 10; // 去掉个位数以便处理下一位
}
// 判断原数i是否等于各位数字立方和
if (i == sum)
{
printf("%d ", i); // 输出是水仙花数的整数
}
}
return 0; // 程序正常结束,返回值为0
}
引入必要的头文件,包括
stdio.h
以使用输入输出函数,以及math.h
以调用求幂函数pow
。使用for循环遍历100到999的所有可能的三位数。
初始化变量
n
表示位数计数器,tmp
复制i
值用于后续操作,sum
用于存储各位数字立方和。第一个while循环计算
tmp
(即原始数值i
)的位数,并将结果储存在变量n
中。将
tmp
恢复为原始数值,进入第二个while循环,该循环用来逐位计算立方并累加到sum
中。在第二个循环内部,首先计算
tmp
的个位数的n
次方(此处实际上是立方),然后将其累加到sum
上。接着,通过
tmp /= 10
去掉个位数,准备处理下一位。循环结束后,比较原始数
i
与各位数字立方和sum
,若相等则输出该数为水仙花数。最后,主函数返回0表示程序正常结束。
????????通过这段C语言程序,我们可以有效地找出所有三位水仙花数。当然,对于不同位数的自幂数判断,只需调整循环范围和相应逻辑即可。