C# 实现(阿姆斯特朗数)
阿姆斯特朗数
阿姆斯特朗数是一个数字,等于每个数字的幂乘以总位数。 例如,诸如0、1、153、370、371和407、1634、8208、9474的数字是阿姆斯特朗数。
例如:
-
371 为3位数, 则用每位数的3次方
(3 * 3 * 3)=27
(7 * 7 * 7)=343
(1 * 1 * 1) =1
总数: 27+343+1=371
判断数字是否属于阿姆斯特朗数?
static void Main(string[] args)
{
int i = 0;
int digitCount = 0;
/*
* 这里我们只测试int类型的最大值区间(<2,147,483,647)的结果,
* 所以我们定义的长度为0
*/
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.计算结果
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();
}
测试输出结果:
获取某个区间的所有阿姆斯特朗数
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;
}
测试输出结果: