Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Số Armstrong giữa hai số nguyên trong C++

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