判断水仙花数的C语言实现及其解析

什么是水仙花数?

在数学领域,水仙花数(也称为自幂数)是指一个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语言实现代码与解析

下面是一个用于判断任意位数是否为水仙花数的C语言程序,但在此例中我们将重点放在三位数上:

#include 
#include  // 引入 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
}
  1. 引入必要的头文件,包括stdio.h以使用输入输出函数,以及math.h以调用求幂函数pow

  2. 使用for循环遍历100到999的所有可能的三位数。

  3. 初始化变量n表示位数计数器,tmp复制i值用于后续操作,sum用于存储各位数字立方和。

  4. 第一个while循环计算tmp(即原始数值i)的位数,并将结果储存在变量n中。

  5. tmp恢复为原始数值,进入第二个while循环,该循环用来逐位计算立方并累加到sum中。

  6. 在第二个循环内部,首先计算tmp的个位数的n次方(此处实际上是立方),然后将其累加到sum上。

  7. 接着,通过tmp /= 10去掉个位数,准备处理下一位。

  8. 循环结束后,比较原始数i与各位数字立方和sum,若相等则输出该数为水仙花数。

  9. 最后,主函数返回0表示程序正常结束。

        通过这段C语言程序,我们可以有效地找出所有三位水仙花数。当然,对于不同位数的自幂数判断,只需调整循环范围和相应逻辑即可。

你可能感兴趣的:(c语言,算法,数据结构)