Data_Structure/作業/unit5/narcissistic-number_claude.cpp
2025-01-20 21:30:53 +08:00

86 lines
1.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// 計算在指定進位制下的位數
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;
}