Data_Structure/作業/unit5/narcissistic-number_claude.cpp

86 lines
1.8 KiB
C++
Raw Normal View History

2025-01-20 21:30:53 +08:00
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// <20>p<EFBFBD><70><EFBFBD>b<EFBFBD><62><EFBFBD>w<EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int getDigitCount(int num, int base) {
int count = 0;
while (num > 0) {
count++;
num /= base;
}
return count;
}
// <20>ˬd<CBAC>O<EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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);
}
// <20>N<EFBFBD>Ʀr<C6A6><EFBFBD><E0B4AB><EFBFBD><EFBFBD><EFBFBD>w<EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD>r<EFBFBD><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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("<EFBFBD>p<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD>֭Ӫ<EFBFBD><EFBFBD>i<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? ==> ");
scanf("%d", &targetCount);
printf("<EFBFBD><EFBFBD><EFBFBD>J<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<16) ==> ");
scanf("%d", &base);
if (base < 2 || base > 16) {
printf("<EFBFBD>򩳥<EFBFBD><EFBFBD><EFBFBD><EFBFBD>b2<EFBFBD><EFBFBD>15<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
return 1;
}
printf("\n<EFBFBD>b%d<>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD><55><EFBFBD>e%d<>Ӫ<EFBFBD><D3AA>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD>ơG\n", base, targetCount);
while (count < targetCount) {
if (isArmstrong(num, base)) {
printf("#%d\t", count + 1);
// <20>L<EFBFBD>X<EFBFBD>Ʀr<C6A6><72><EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int temp = num;
int digits[32];
int digitCount = 0;
// <20><EFBFBD><E0B4AB><EFBFBD><EFBFBD><EFBFBD>w<EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD>
while (temp > 0) {
digits[digitCount++] = temp % base;
temp /= base;
}
// <20>ϦV<CFA6>L<EFBFBD>X<EFBFBD>Ʀr
for (int i = digitCount - 1; i >= 0; i--) {
printNumber(digits[i], base);
}
printf("\n");
count++;
}
num++;
}
return 0;
}