求阿姆斯特朗数: //#define kBaseNumber 8 #define kBaseNumber 10 //#define kBaseNumber 16 #define kDigits 8 int main(int argc, char** argv) { int arr[kBaseNumber][kDigits]; memset(arr, 0, sizeof(int) * kBaseNumber * kDigits); for (int number = 1; number < kBaseNumber; ++number) { arr[number][0] = number; } for (int number = 1; number < kBaseNumber; ++number) { for (int digits = 1; digits < kDigits; ++digits) { arr[number][digits] = arr[number][digits - 1] * number; } } int num[kDigits]; memset(num, 0, sizeof(int) * kDigits); int curDigits = 1; int curNumber = 0; for (int d = kDigits - 1; d >= 0; --d) { curNumber = curNumber * kBaseNumber + num[d]; } while (true) { int curSum = 0; for (int d = 0; d < curDigits; ++d) { curSum += arr[num[d]][curDigits - 1]; } if (curNumber == curSum) { if (kBaseNumber == 8) { cout << oct << curNumber << endl; } if (kBaseNumber == 10) { cout << dec << curNumber << endl; } if (kBaseNumber == 16) { cout << hex << curNumber << endl; } } ++curNumber; int d = 0; while (d < kDigits) { if (num[d] < kBaseNumber - 1) { ++num[d]; break; } num[d] = 0; ++d; } if (d == kDigits) { break; } else if (d == curDigits) { ++curDigits; } } return 0; }