#include #include #include // 計算在指定進位制下的位數 int getDigitCount(int num, int base) { int count = 0; while (num > 0) { count++; num /= base; } return count; } // 檢查是否為阿姆斯壯數 int isArmstrong(int num, int base) { int originalNum = num; int digitCount = getDigitCount(num, base); int sum = 0; while (num > 0) { int digit = num % base; sum += pow(digit, digitCount); num /= base; } return (sum == originalNum); } // 將數字轉換為指定進位制的字串表示 void printNumber(int num, int base) { if (num < 10) { printf("%d", num); } else { printf("%c", 'A' + (num - 10)); } } int main() { int count = 0; int targetCount; int base; int num = 1; printf("計算多少個阿姆斯壯數? ==> "); scanf("%d", &targetCount); printf("輸入基底(<16) ==> "); scanf("%d", &base); if (base < 2 || base > 16) { printf("基底必須在2到15之間\n"); return 1; } printf("\n在%d進位制下的前%d個阿姆斯壯數:\n", base, targetCount); while (count < targetCount) { if (isArmstrong(num, base)) { printf("#%d\t", count + 1); // 印出數字的進位制表示 int temp = num; int digits[32]; int digitCount = 0; // 轉換為指定進位制 while (temp > 0) { digits[digitCount++] = temp % base; temp /= base; } // 反向印出數字 for (int i = digitCount - 1; i >= 0; i--) { printNumber(digits[i], base); } printf("\n"); count++; } num++; } return 0; }