86 lines
1.8 KiB
C++
86 lines
1.8 KiB
C++
|
#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;
|
|||
|
}
|