在 C 语言中检查一个数字是否为阿姆斯特朗数

CCBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,我们将学习如何使用 C 程序检查一个给定的数字是否为阿姆斯特朗数。我们将首先从用户那里读取一个整数输入,然后计算每个数字的幂之和,该幂等于数字的总位数,最后打印该数字是否为阿姆斯特朗数。

该程序将引导用户逐步完成整个过程,从读取输入到确定该数字是否为阿姆斯特朗数。

读取一个整数

在这一步中,我们将学习如何在 C 程序中从用户那里读取一个整数输入,以检查它是否是一个阿姆斯特朗数。

首先,让我们在项目目录中创建一个新的 C 文件:

cd ~/project
nano armstrong.c

现在,让我们编写读取整数的初始代码:

#include <stdio.h>

int main() {
    int number;

    // 提示用户输入一个数字
    printf("输入一个数字,检查它是否是阿姆斯特朗数:");

    // 读取整数输入
    scanf("%d", &number);

    // 打印输入的数字以验证输入
    printf("你输入的是:%d\n", number);

    return 0;
}

编译并运行该程序:

gcc armstrong.c -o armstrong
./armstrong

示例输出:

输入一个数字,检查它是否是阿姆斯特朗数:153
你输入的是:153

让我们来分析一下这段代码:

  • scanf("%d", &number) 从用户输入中读取一个整数
  • &number 传递 number 变量的内存地址
  • printf() 用于提示用户并显示输入的数字

计算每个数字的幂之和

在这一步中,我们将修改之前的程序,以计算每个数字的幂之和,该幂等于数字的总位数。

打开 armstrong.c 文件:

cd ~/project
nano armstrong.c

更新代码以计算数字总和:

#include <stdio.h>
#include <math.h>

int main() {
    int number, originalNumber, remainder, digitCount = 0;
    long long digitSum = 0;

    // 提示用户输入一个数字
    printf("输入一个数字,检查它是否是阿姆斯特朗数:");
    scanf("%d", &number);

    // 存储原始数字以供后续比较
    originalNumber = number;

    // 计算数字的位数
    while (number!= 0) {
        number /= 10;
        digitCount++;
    }

    // 将数字重置为原始值
    number = originalNumber;

    // 计算每个数字的幂之和
    while (number!= 0) {
        remainder = number % 10;
        digitSum += pow(remainder, digitCount);
        number /= 10;
    }

    // 打印结果
    printf("数字的位数:%d\n", digitCount);
    printf("数字的幂之和:%lld\n", digitSum);

    return 0;
}

使用数学库编译程序:

gcc armstrong.c -o armstrong -lm
./armstrong

示例输出:

输入一个数字,检查它是否是阿姆斯特朗数:153
数字的位数:3
数字的幂之和:153

关键概念解释:

  • digitCount 跟踪数字的位数
  • pow(remainder, digitCount) 将每个数字提升到总位数的幂
  • number % 10 提取最后一位数字
  • number /= 10 在每次迭代中删除最后一位数字
  • long long 用于处理可能较大的数字总和

打印是否为阿姆斯特朗数

在这一步中,我们将通过比较原始数字和计算出的数字总和来完成阿姆斯特朗数检查器。

打开 armstrong.c 文件:

cd ~/project
nano armstrong.c

更新代码以确定并打印该数字是否为阿姆斯特朗数:

#include <stdio.h>
#include <math.h>

int main() {
    int number, originalNumber, remainder, digitCount = 0;
    long long digitSum = 0;

    // 提示用户输入一个数字
    printf("输入一个数字,检查它是否是阿姆斯特朗数:");
    scanf("%d", &number);

    // 存储原始数字以供后续比较
    originalNumber = number;

    // 计算数字的位数
    while (number!= 0) {
        number /= 10;
        digitCount++;
    }

    // 将数字重置为原始值
    number = originalNumber;

    // 计算每个数字的幂之和
    while (number!= 0) {
        remainder = number % 10;
        digitSum += pow(remainder, digitCount);
        number /= 10;
    }

    // 检查该数字是否为阿姆斯特朗数
    if (digitSum == originalNumber) {
        printf("%d 是一个阿姆斯特朗数。\n", originalNumber);
    } else {
        printf("%d 不是一个阿姆斯特朗数。\n", originalNumber);
    }

    return 0;
}

编译程序:

gcc armstrong.c -o armstrong -lm
./armstrong

示例输出:

输入一个数字,检查它是否是阿姆斯特朗数:153
153 是一个阿姆斯特朗数。

输入一个数字,检查它是否是阿姆斯特朗数:154
154 不是一个阿姆斯特朗数。

关键概念解释:

  • digitSumoriginalNumber 进行比较
  • 如果它们相等,则是阿姆斯特朗数
  • 该程序处理不同的输入场景

总结

在这个实验中,你将学习如何从用户那里读取一个整数输入,计算每个数字的幂之和(该幂等于数字的总位数),并确定该数字是否为阿姆斯特朗数。第一步是提示用户输入一个数字并将其存储在一个变量中。第二步着重于计算每个数字的幂之和,然后将其与原始数字进行比较,以检查它是否为阿姆斯特朗数。