在此示例中,您將學(xué)習(xí)查找用戶輸入的兩個整數(shù)之間的所有Armstrong數(shù)字。
要理解此示例,您應(yīng)該了解以下C語言編程主題:
一個正整數(shù)稱為阿姆斯特朗數(shù)(n階),如果
abcd... = an + bn + cn + dn +
對于3位的阿姆斯特朗數(shù),每個數(shù)字的立方數(shù)之和等于數(shù)字本身。例如,153是Armstrong的數(shù)字,因?yàn)?/p>
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ù)計(jì)算
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)部,首先計(jì)算一個整數(shù)的位數(shù),并將其存儲在中count。并且,各個數(shù)字的冪之和存儲在result變量中。
如果number等于result,則該數(shù)字為阿姆斯壯數(shù)字。
注意:您需要在外部循環(huán)的每次迭代中將count和result重置為0。