Число Армстронга в C

Число Армстронга в C

1 марта 2022 г.

[Источник] (https://www.freepik.com/)


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


Для числа, если сумма всех цифр в их возведенной степени, равная длине числа, равна самому числу, то это число будет числом Армстронга.


Возьмем пример 407:


-> Длина 407 равна 3, и если мы возьмем сумму всех его цифр в степени 3, то это будет 4*4*4 + 0*0*0 + 7*7*7 = 64 + 0 + 343 = 407. Поскольку мы получаем результат, равный 407, который является нашим исходным числом, это означает, что 407 является числом Армстронга.


Мы обсудим два алгоритма:


  • Чтобы найти данное число является числом Армстронга или нет.

  • Найдите количество чисел Армстронга в заданном диапазоне.

Число является числом Армстронга или нет


Этапы алгоритма:


  1. Найдите длину заданного числа с помощью цикла while.

  1. Создайте переменную для хранения количества цифр в заданном числе.

  1. Запустите цикл while, пока текущее число не станет равным нулю, и продолжайте делить текущее число на 10 и увеличивать переменную count, чтобы подсчитать количество цифр в числе.

  1. Теперь создайте переменную для хранения суммы степеней каждой цифры и инициализируйте ее нулем.

  1. Запустите цикл while, пока текущее число не станет равным нулю, и продолжайте делить текущее число на 10. В этом процессе последнюю цифру текущего числа можно получить, используя current_number % 10.

  1. Добавление last_digit, возведенного в степень длины числа, приводит к созданию переменной для хранения общей суммы.

  1. Наконец, проверьте, равна ли общая сумма заданному числу, тогда данное число является числом Армстронга, иначе нет.

Давайте рассмотрим пример реализации описанного выше подхода для лучшего понимания:


```нажмите


include


include


интервал основной () {


// начальный номер


инт п = 407;


// создаем дополнительную переменную для хранения начального числа


интервал temp_n = n;


// сохраняем количество цифр n в count


количество счетчиков = 0;


пока (temp_n)


temp_n = temp_n / 10; // продолжаем делить на 10


количество++;


// когда temp_n снова становится равным нулю, присваиваем ему n


темп_n = n;


// находим искомую сумму


целая сумма = 0;


пока (temp_n)


// a содержит последнюю цифру


int a = temp_n % 10;


// сохраняем сумму степеней отдельных цифр в переменной sum


сумма += pow(a, count);


temp_n = temp_n / 10; // продолжаем делить


// если сумма равна n, число является числом Армстронга


если (сумма == п)


printf("%d — число Армстронга.", n);


еще


printf("%d не является числом Армстронга.", n);


вернуть 0;


Выход:


```нажмите


407 — это число Армстронга.


Временная сложность


В приведенном выше подходе мы продолжаем делить текущее число на 10, пока оно не станет нулем, то есть log10(N) раз. После этого для каждой цифры мы возвели их мощность в число цифр, то есть log10(N).


Итак, окончательная сложность, если O(log10(N))2.


Космическая сложность


В приведенном выше подходе мы не использовали дополнительное пространство. Таким образом, пространственная сложность равна O(1).


Количество чисел Армстронга в заданном диапазоне


Этапы алгоритма:


  1. Во-первых, мы реализуем цикл for между заданным диапазоном.

  1. Мы создадим функцию для проверки, является ли текущее число числом Армстронга или нет.

  1. В функции мы будем реализовывать подход, который мы обсуждали выше.

  1. На каждой итерации цикла for мы просто будем передавать текущее число, и если это число Армстронга, то мы будем печатать его как число Армстронга.

  1. Также мы собираемся вести подсчет общего количества чисел Армстронга.

Давайте посмотрим на пример вышеприведенного подхода для лучшего понимания:


```нажмите


include


include


// функция для проверки, является ли число Армстронгом или нет


bool is_armstrong (int n)


// создаем дополнительную переменную для хранения начального числа


интервал temp_n = n;


// сохраняем количество цифр n в count


количество счетчиков = 0;


пока (temp_n)


temp_n = temp_n / 10; // продолжаем делить на 10


количество++;


// когда temp_n снова становится равным нулю, присваиваем ему n


темп_n = n;


// находим искомую сумму


целая сумма = 0;


пока (temp_n)


// a содержит последнюю цифру


int a = temp_n % 10;


// сохраняем сумму степеней отдельных цифр в переменной sum


сумма += pow(a, count);


temp_n = temp_n / 10; // продолжаем делить


// если сумма равна n, вернуть true


если (сумма == п)


вернуть истину;


еще


вернуть ложь;


интервал основной () {


интервал начало = 100, конец = 1000;


printf("Вывести все числа Армстронга между %d и %d:
",start,end);


// для проверки того, является ли каждое число числом Армстронга или нет, проходя по ним цикл


// кроме того, мы будем вести подсчет количества чисел Армстронга


количество счетчиков = 0;


for(int i = start; i <= end;i++){


// вызов функции для проверки, является ли текущий номер Армстронгом или нет


если (is_armstrong (я))


// увеличить количество


количество++;


printf("Число Армстронга:%d
", i);


printf("Всего %d число является числом Армстронга от 1 до 1000.", count );


вернуть 0;


Выход:


```нажмите


Выведите все числа Армстронга от 100 до 1000:


Номер Армстронга: 370


Номер Армстронга: 371


Номер Армстронга: 407


Общее число 3 — это число Армстронга от 1 до 1000.


Временная сложность


В описанном выше подходе мы перебираем все числа, которые занимают O(N) время, где N — количество элементов в диапазоне. Кроме того, как мы видели в предыдущем разделе, для числа M временная сложность, чтобы проверить, является ли это числом Армстронга или нет, занимает O(log10(M))2.


Итак, окончательная сложность, если N*O(log10(N))2.


Космическая сложность


В приведенном выше подходе мы не использовали дополнительное пространство. Таким образом, пространственная сложность равна O(1).


Заключение


  • Для числа, если сумма всех цифр в их возведенной степени, равная длине числа, равна самому числу, то это число будет числом Армстронга.

  • Сложность времени, чтобы найти число Армстронга или нет, составляет O(log10(N))2.

  • Пространственная сложность для нахождения числа Армстронга или нет составляет O(1).

  • Ноль также является числом Армстронга.

  • Вы можете обратиться к этой [статье Скейлера] (https://www.scaler.com/topics/armstrong-number-in-c/), чтобы подробно рассмотреть все понятия, связанные с числами Армстронга в c.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE