在此示例中,您將學(xué)習(xí)查找用戶輸入的兩個整數(shù)之間的所有Armstrong數(shù)字。
要理解此示例,您應(yīng)該了解以下C語言編程主題:
一個正整數(shù)稱為阿姆斯特朗數(shù)(n階),如果
abcd... = an + bn + cn + dn +
對于3位的阿姆斯特朗數(shù),每個數(shù)字的立方數(shù)之和等于數(shù)字本身。例如,153是Armstrong的數(shù)字,因為
153 = 1*1*1 + 5*5*5 + 3*3*3
在嘗試該程序之前,請學(xué)習(xí)如何檢查整數(shù)是否為Armstrong數(shù)字。
#include <math.h> #include <stdio.h> int main() { int low, high, number, originalNumber, rem, count = 0; double result = 0.0; printf("輸入兩個數(shù)字(間隔): "); scanf("%d %d", &low, &high); printf("%d和%d之間的阿姆斯壯數(shù)字為: ", low, high); //將數(shù)字從(low + 1)迭代到(high - 1) //在每次迭代中,檢查數(shù)字是否為Armstrong for (number = low + 1; number < high; ++number) { originalNumber = number; //位數(shù)計算 while (originalNumber != 0) { originalNumber /= 10; ++count; } originalNumber = number; //結(jié)果包含個位數(shù)的n次冪的和 while (originalNumber != 0) { rem = originalNumber % 10; result += pow(rem, count); originalNumber /= 10; } //檢查數(shù)字是否等于單個數(shù)字的n次冪之和 if ((int)result == number) { printf("%d ", number); } //重置值 count = 0; result = 0; } return 0; }
輸出結(jié)果
輸入兩個數(shù)字(間隔): 200 2000 200和2000之間的阿姆斯壯數(shù)字為: 370 371 407 1634
在程序中,外循環(huán)從(low + 1)迭代到(high-1)。在每次迭代中,都會檢查number是否為Armstrong數(shù)。
在外循環(huán)內(nèi)部,首先計算一個整數(shù)的位數(shù),并將其存儲在中count。并且,各個數(shù)字的冪之和存儲在result變量中。
如果number等于result,則該數(shù)字為阿姆斯壯數(shù)字。
注意:您需要在外部循環(huán)的每次迭代中將count和result重置為0。