C# 算法实现:判断阿姆斯特朗数与区间查询
阿姆斯特朗数是指一个 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 步:判断单个数字是否为阿姆斯特朗数
此步骤的目标是接收用户输入的一个整数,通过循环拆分数字并计算幂和,最终返回布尔判断结果或打印提示信息。
- 环境准备:打开 Visual Studio 或任意支持 C# 的编辑器,创建一个
Console Application项目。 - 变量初始化:定义用于存储原始输入值的临时变量、用于累加结果的变量
sum,以及记录位数的计数器digitCount。 - 获取输入:使用
Console.ReadLine()读取用户输入的字符串,并通过int.Parse()转换为整型。 - 数字拆分与统计:
- 使用
while (number > 0)循环。 - 利用取模运算符
%获取当前个位数字存入数组。 - 利用整除运算符
/去掉个位,更新数字。 - 每处理一位,递增位数计数
digitCount++。
- 使用
- 计算幂和:遍历存储的数字数组,对每位数字调用
Math.Pow(digitArray[i], digitCount)并累加至sum。 - 比对结果:如果
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)所有的阿姆斯特朗数,可以采用封装函数调用的方式。主程序负责遍历区间,辅助函数负责判定逻辑。
- 输入区间:分别请求用户输入起始数字
StartNumber和结束数字EndNumber。 - 遍历区间:使用
for循环从起始数迭代至结束数。 - 调用判定函数:在循环体内调用自定义方法
IsArmstrongNumber(i)。 - 输出匹配项:若函数返回
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# 阿姆斯特朗数算法的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













