Изучение чисел Армстронга: развлечение с функциями на C

В этой статье блога мы окунемся в увлекательный мир чисел Армстронга и рассмотрим различные методы их идентификации с помощью функций языка программирования C. Мы раскроем концепцию чисел Армстронга, обсудим различные подходы к решению этой проблемы и предоставим примеры кода для каждого метода. Итак, начнём!

Понимание чисел Армстронга:
Число Армстронга, также известное как нарциссическое число, — это число, равное сумме своих собственных цифр, возведенной в степень количества цифр. Например, 153 — это число Армстронга, потому что 1^3 + 5^3 + 3^3 = 153.

Метод 1: использование метода грубой силы
Самый простой метод определения того, является ли данное число числом Армстронга, — это использование метода грубой силы. Мы переберем каждую цифру числа, возведем ее в степень общего количества цифр и просуммируем их. Если полученная сумма равна исходному числу, это число Армстронга.

#include<stdio.h>
#include<math.h>
int isArmstrong(int num) {
    int originalNum = num;
    int sum = 0;
    int numOfDigits = 0;
    // Counting the number of digits
    while (originalNum != 0) {
        originalNum /= 10;
        numOfDigits++;
    }
    originalNum = num; // Reset originalNum to its initial value
    // Calculating the sum of digits raised to the power of numOfDigits
    while (originalNum != 0) {
        int digit = originalNum % 10;
        sum += pow(digit, numOfDigits);
        originalNum /= 10;
    }
// Checking if the sum is equal to the original number
    if (sum == num) {
        return 1; // It is an Armstrong number
    } else {
        return 0; // It is not an Armstrong number
    }
}
int main() {
    int number;
    printf("Enter a number: ");
    scanf("%d", &number);
    if (isArmstrong(number)) {
        printf("%d is an Armstrong number.", number);
    } else {
        printf("%d is not an Armstrong number.", number);
    }
    return 0;
}

Метод 2: использование рекурсии
Другой подход к проверке чисел Армстронга — рекурсия. Мы определим рекурсивную функцию, которая вычисляет сумму цифр, возведенную в степень количества цифр. Если полученная сумма равна исходному числу, это число Армстронга.

#include<stdio.h>
#include<math.h>
int calculatePower(int num, int power) {
    if (power == 0) {
        return 1;
    } else {
        return num * calculatePower(num, power - 1);
    }
}
int isArmstrong(int num, int numOfDigits) {
    if (num == 0) {
        return 0;
    } else {
        int digit = num % 10;
        return calculatePower(digit, numOfDigits) + isArmstrong(num / 10, numOfDigits);
    }
}
int main() {
    int number;
    printf("Enter a number: ");
    scanf("%d", &number);

    int numOfDigits = floor(log10(number)) + 1;
    if (isArmstrong(number, numOfDigits) == number) {
        printf("%d is an Armstrong number.", number);
    } else {
        printf("%d is not an Armstrong number.", number);
    }
    return 0;
}

В этой статье мы рассмотрели два разных метода определения чисел Армстронга с использованием функций C. Первый метод включал в себя метод грубой силы, при котором мы перебирали каждую цифру и возводили ее в степень общего числа цифр. Второй метод использовал рекурсию для вычисления суммы цифр, возведенной в степень количества цифр. Оба метода предоставляют эффективные способы определить, является ли данное число числом Армстронга.

Не забывайте экспериментировать и экспериментировать с предоставленными примерами кода, чтобы углубить понимание чисел Армстронга и еще больше улучшить свои навыки программирования на C. Наслаждайтесь изучением мира чисел Армстронга и получайте удовольствие от программирования!