阿姆斯特朗數
阿姆斯特朗數是一個數字,等於每個數字的冪乘以總位數。 例如,諸如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;
}
測試輸出結果: