Một số nguyên được gọi là số Armstrong bậc n nếu tách từng chữ số, lũy thừa n và cộng lại thì tổng bằng chính số đó. Với số 3 chữ số: tổng lập phương các chữ số bằng chính số đó.
Ví dụ: 153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153 → Là số Armstrong.
Ví dụ
Input: 999 9999 Output: Các số Armstrong giữa 999 và 9999: 1634 8208 9474
Giải thích
1634 = 1⁴+6⁴+3⁴+4⁴ = 1+1296+81+256 = 1634
Lưu ý: Số 1634 có 4 chữ số nên lũy thừa 4, không phải 3 như văn bản gốc.
Thuật toán
Duyệt qua tất cả số trong khoảng cho trước. Với mỗi số, đếm số chữ số n, tính tổng lũy thừa n của các chữ số. Nếu tổng bằng số đó thì in ra.
Code ví dụ
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int low = 100;
int high = 400;
cout << "Các số Armstrong giữa " << low << " và " << high << " là:\n";
for (int i = low + 1; i < high; ++i) {
int x = i;
int n = 0;
// Đếm số chữ số
while (x != 0) {
x /= 10;
++n;
}
int pow_sum = 0;
x = i;
while (x != 0) {
int digit = x % 10;
pow_sum += pow(digit, n);
x /= 10;
}
if (pow_sum == i)
cout << i << " ";
}
cout << "\n";
return 0;
}
Kết quả
Các số Armstrong giữa 100 và 400 là: 153 370 371 407