Другие языки программирования и технологии

Заповнити масив різними числами Армстронга. Числом Армстронга називають натуральне n-цифрове число, сума цифр якого, під

#include <iostream>
#include <iomanip>
using namespace std;
typedef unsigned long long ullong;
void sequence_Armstrong(ullong *, const size_t);
ullong pow_u(unsigned, unsigned);
void show_array(ullong *, const size_t);
int main() {
    const size_t size = 20;
    ullong arm[size] = {0};
    sequence_Armstrong(arm, size);
    show_array(arm, size);
    cin.get();
    return 0;
}
void show_array(ullong * arm, const size_t size) {
    for (size_t n = 0; n < size; n++) cout << arm[n] << endl;
}
ullong pow_u(unsigned basis, unsigned indicator) {
    double x = pow(double(basis), int(indicator));
    if (x >= double(ULLONG_MAX)) return - 1;
    ullong degree = basis;
    for (unsigned n = 1; n < indicator; degree *= basis, n++);
    return degree;
}
void sequence_Armstrong(ullong * arm, const size_t size) {
    ullong k, sum;
    unsigned pw, num;
    size_t next = 0;
    for (ullong n = 0; n < ULLONG_MAX; n++) {
        k = n;
        pw = 0;
        sum = 0;
        do {
            k /= 10;
            ++pw;
        } while (k > 0);
        k = n;
        double tmp;
        ullong dx;
        do {
            num = k % 10;
            dx = pow_u(num, pw);
            tmp = double(dx) + sum;
            if (tmp >= double(ULLONG_MAX)) {
                cout << "Stack overflow" << endl;
                sum = -1;
            } else {
                sum += dx;
                k /= 10;
            }
        } while (k > 0);
        if (ullong(sum) == n) arm[next++] = sum;
        if (next == size) return;
    }
}

ullong - переписать вручную.
АБ
Александр Бабин
78 150
Лучший ответ
Данил Пашов
Данил Пашов
97 495

Похожие вопросы