Число Армстронга в 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 является числом Армстронга.
Мы обсудим два алгоритма:
- Чтобы найти данное число является числом Армстронга или нет.
- Найдите количество чисел Армстронга в заданном диапазоне.
Число является числом Армстронга или нет
Этапы алгоритма:
- Найдите длину заданного числа с помощью цикла while.
- Создайте переменную для хранения количества цифр в заданном числе.
- Запустите цикл while, пока текущее число не станет равным нулю, и продолжайте делить текущее число на 10 и увеличивать переменную count, чтобы подсчитать количество цифр в числе.
- Теперь создайте переменную для хранения суммы степеней каждой цифры и инициализируйте ее нулем.
- Запустите цикл while, пока текущее число не станет равным нулю, и продолжайте делить текущее число на 10. В этом процессе последнюю цифру текущего числа можно получить, используя current_number % 10.
- Добавление last_digit, возведенного в степень длины числа, приводит к созданию переменной для хранения общей суммы.
- Наконец, проверьте, равна ли общая сумма заданному числу, тогда данное число является числом Армстронга, иначе нет.
Давайте рассмотрим пример реализации описанного выше подхода для лучшего понимания:
```нажмите
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).
Количество чисел Армстронга в заданном диапазоне
Этапы алгоритма:
- Во-первых, мы реализуем цикл for между заданным диапазоном.
- Мы создадим функцию для проверки, является ли текущее число числом Армстронга или нет.
- В функции мы будем реализовывать подход, который мы обсуждали выше.
- На каждой итерации цикла for мы просто будем передавать текущее число, и если это число Армстронга, то мы будем печатать его как число Армстронга.
- Также мы собираемся вести подсчет общего количества чисел Армстронга.
Давайте посмотрим на пример вышеприведенного подхода для лучшего понимания:
```нажмите
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.
Оригинал