C# 算法实现:判断阿姆斯特朗数与区间查询

Luna
Luna
发布时间:2026-10-16 | 7人浏览过
原创

阿姆斯特朗数是指一个 n 位正整数等于其各位数字的 n 次方之和的数。本文将介绍使用 C# 控制台应用程序来实现两个核心功能:判断单个数字是否为阿姆斯特朗数,以及获取指定区间内的所有阿姆斯特朗数。文章内容涵盖原理解析、核心代码实现及测试输出展示。

理解阿姆斯特朗数逻辑

阿姆斯特朗数(Armstrong Number)的定义是:如果一个 n 位正整数等于其各位数字的 n 次方之和,则该数为阿姆斯特朗数。例如:

  • 371:这是一个三位数。计算其每一位的 3 次方和:$3^3 + 7^3 + 1^3 = 27 + 343 + 1 = 371$。因此 371 是阿姆斯特朗数。
  • 153:$1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153$。
  • 0, 1 等也符合定义。

在计算机算法中,核心任务是将一个整数拆分为单个数字,统计总位数,然后进行幂运算累加,最后与原数值比对。

第 1 步:判断单个数字是否为阿姆斯特朗数

此步骤的目标是接收用户输入的一个整数,通过循环拆分数字并计算幂和,最终返回布尔判断结果或打印提示信息。

  1. 环境准备:打开 Visual Studio 或任意支持 C# 的编辑器,创建一个 Console Application 项目。
  2. 变量初始化:定义用于存储原始输入值的临时变量、用于累加结果的变量 sum,以及记录位数的计数器 digitCount。
  3. 获取输入:使用 Console.ReadLine() 读取用户输入的字符串,并通过 int.Parse() 转换为整型。
  4. 数字拆分与统计:
    • 使用 while (number > 0) 循环。
    • 利用取模运算符 % 获取当前个位数字存入数组。
    • 利用整除运算符 / 去掉个位,更新数字。
    • 每处理一位,递增位数计数 digitCount++。
  5. 计算幂和:遍历存储的数字数组,对每位数字调用 Math.Pow(digitArray[i], digitCount) 并累加至 sum。
  6. 比对结果:如果 sum 等于原始输入的副本 temporaryNumber,则输出“属于阿姆斯特朗数”,否则输出“不属于”。
static void Main(string[] args)
{
    int i = 0;
    int digitCount = 0;
    // 针对 int 类型最大值区间 (<2,147,483,647),最大位数为 10,故分配长度为 10 的数组
    int[] digitArray = new int[10];
    double sum = 0;

    Console.Write("请输入验证的数字 : ");
    // 1. 输入数字
    int number = int.Parse(Console.ReadLine());
    // 2. 用临时变量保存该数字,以免后续运算丢失原值
    int temporaryNumber = number;
    
    // 3. 保存数字的总数以及每个数字存储在数字数组中
    while (number > 0)
    {
        digitArray[i++] = number % 10;
        number = number / 10;
        digitCount++;
    }
    
    // 4. 计算结果:每位数字的 digitCount 次方之和
    for (i = 0; i < digitCount; i++)
        sum += Math.Pow(digitArray[i], digitCount);

    // 5. 判断结果
    if (sum == temporaryNumber)
        Console.WriteLine($"{temporaryNumber} 属于阿姆斯特朗数");
    else
        Console.WriteLine($"{temporaryNumber} 不属于阿姆斯特朗数");
    
    Console.ReadLine();
}

执行上述代码后,输入如 371 或 123,程序将弹出相应的判断结果对话框或控制台输出。界面效果如下所示:

第 2 步:获取某个区间的所有阿姆斯特朗数

如果需要查找一个范围内(如 1 到 10000)所有的阿姆斯特朗数,可以采用封装函数调用的方式。主程序负责遍历区间,辅助函数负责判定逻辑。

  1. 输入区间:分别请求用户输入起始数字 StartNumber 和结束数字 EndNumber。
  2. 遍历区间:使用 for 循环从起始数迭代至结束数。
  3. 调用判定函数:在循环体内调用自定义方法 IsArmstrongNumber(i)。
  4. 输出匹配项:若函数返回 true,则通过 Console.WriteLine() 打印该数字。
static void Main(string[] args)
{
    Console.Write("输入起始数字 : ");
    int StartNumber = int.Parse(Console.ReadLine());
    Console.Write("输入结束数字 : ");
    int EndNumber = int.Parse(Console.ReadLine());
    
    Console.WriteLine($"阿姆斯特朗数区间为: {StartNumber} ~ {EndNumber} 的结果为 : ");
    
    // 遍历区间内每一个数字
    for (int i = StartNumber; i <= EndNumber; i++)
    {
        if (IsArmstrongNumber(i))
            Console.WriteLine(i);
    }
    Console.ReadLine();
}

// 独立判定方法,提高代码复用性
static bool IsArmstrongNumber(int number)
{
    int sum = 0;
    int temporaryNumber = number;
    int temp = 0;
    // 动态获取数字长度,比硬编码更通用
    int length = number.ToString().Length;
    
    while (number != 0)
    {
        temp = number % 10;         // 取出最后一位
        number = number / 10;       // 去掉最后一位
        sum += (int)Math.Pow(temp, length); // 累加幂次和
    }

    if (sum == temporaryNumber)
        return true;
    else
        return false;
}

当输入区间为 1 到 1000 时,程序会筛选出 1, 2, ..., 9, 153, 370, 371, 407 等符合条件的数字。测试结果窗口截图如下:

以上就是 C# 算法之实现阿姆斯特朗数的详细内容,更多关于 C# 阿姆斯特朗数算法的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表