嘿巴网

用C语言探索与实现水仙花数,以153为例

本文围绕水仙花数展开探索,重点呈现了使用C语言实现水仙花数程序的过程,并对相关程序进行解析,水仙花数如153 等,是指一个三位数,其各位数字的立方和等于该数本身,通过C语言编程能够准确找出这类特殊数字,程序实现过程涉及数字的分离、计算等操作,对其解析有助于理解C语言在处理数值计算与逻辑判断方面的应用,展现了C语言在解决特定数学问题上的能力与技巧。

在计算机编程的奇妙世界中,有许多有趣的数字现象值得去探索,水仙花数就是其中之一,水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),它是指一个 n 位数(n≥3 ),其各位数字的 n 次方之和等于该数本身。

153 是一个 3 位数,它满足 1³ + 5³ + 3³ = 1 + 125 + 27 = 153,153 是一个水仙花数,我们将用 C 语言编写程序来找出一定范围内的水仙花数。

用C语言探索与实现水仙花数,以153为例

以下是一个简单的 C 语言程序示例:

#include <stdio.h>
#include <math.h>
int main() {
    int num, originalNum, remainder, n = 0, result = 0;
    printf("请输入一个正整数: ");
    scanf("%d", &num);
    originalNum = num;
    // 计算数字的位数
    while (originalNum != 0) {
        originalNum /= 10;
        n++;
    }
    originalNum = num;
    // 计算各位数字的 n 次方之和
    while (originalNum != 0) {
        remainder = originalNum % 10;
        result += pow(remainder, n);
        originalNum /= 10;
    }
    // 判断是否为水仙花数
    if (result == num)
        printf("%d 是一个水仙花数,\n", num);
    else
        printf("%d 不是一个水仙花数,\n", num);
    return 0;
}

在上述程序中,我们首先通过一个循环计算输入数字的位数 n ,再次对原数字进行操作,通过取余和除法运算,分离出每一位数字,并计算每一位数字的 n 次方之和 result ,通过比较 result 和原数字 num ,判断该数字是否为水仙花数。

如果我们想要找出一定范围内的所有水仙花数,可以对程序进行修改:

#include <stdio.h>
#include <math.h>
int main() {
    int lower, upper, num, originalNum, remainder, n = 0, result = 0;
    printf("请输入范围的下限: ");
    scanf("%d", &lower);
    printf("请输入范围的上限: ");
    scanf("%d", &upper);
    printf("在 %d 和 %d 之间的水仙花数为: ", lower, upper);
    for (num = lower; num <= upper; num++) {
        originalNum = num;
        n = 0;
        // 计算数字的位数
        while (originalNum != 0) {
            originalNum /= 10;
            n++;
        }
        originalNum = num;
        result = 0;
        // 计算各位数字的 n 次方之和
        while (originalNum != 0) {
            remainder = originalNum % 10;
            result += pow(remainder, n);
            originalNum /= 10;
        }
        // 判断是否为水仙花数
        if (result == num)
            printf("%d ", num);
    }
    return 0;
}

这个改进后的程序允许用户输入范围的下限和上限,然后通过 for 循环遍历该范围内的每一个数字,按照之前判断单个数字是否为水仙花数的 *** ,找出并输出范围内所有的水仙花数。

水仙花数虽然在实际应用中可能没有特别重要的直接用途,但它作为编程学习中的一个有趣示例,能够帮助初学者更好地理解循环、取余、幂运算等基本编程概念,同时也能激发对数字规律和编程探索的兴趣,通过编写这样的程序,我们不仅掌握了 C 语言的一些基本语法和操作,还能体会到编程在解决数学问题时的魅力。

admin
admin
这个人很神秘