397 подписчиков

Решение 16 задачи проекта Эйлера: Сумма цифр степени

В задаче решается проблема работы с очень большими числами, я использовал массив.

Условия задачи

2^15 = 32768, сумма цифр этого числа равна 3 + 2 + 7 + 6 + 8 = 26.

Какова сумма цифр числа 2^1000?

Описание работы программы

Программа для решения задачи Эйлера #16
Программа для решения задачи Эйлера #16

Основная проблема в этой задаче - невозможность просто оперировать столь большими цифрами в языке C (2^1000 представляет из себя 300-значное число).

Поэтому для хранения чисел при вычисления применил два массива:

int arr[304] = {2};    //массив для записи числа до возведения в степень
int answ[306] = {0}; //после возведения в степень

Возведение числа 2 в очередную степень представляет умножение числа на 2.

num *= 2;                   //умножаем каждую цифру числа в массиве

Если при умножении получаются двузначные числа, то старший разряд отделяется и заносится не в текущую ячейку массива, а в следующую.

dex_num = num/10;           //отделяем десятки, если число более 9
answ[i+1] += dex_num;       //переносим десятки на следующий разряд
num = num%10;               //отделяем числа до 10
answ[i] += num;             //заносим остаток числа в массив

После 1000 итераций умножения числа, цифры ответа складываются

for (int i = 0; i < 304; i++)
//складываем цифры числа
sum_num += arr[i];                  

          Ответ на задачу:

Считает почти за полсекунды.

P.S. Изначальная цель блога - получить "фидбек" в комментариях, чтобы более опытные "кодеры" указывали мне на ошибки, советовали и всячески помогали в саморазвитии.

Также приглашаю всех на мой сайт)

На нем Вы можете посмотреть ответ на задачу Эйлера 16 (когда необходима лишь небольшая подсказка) и последний, самый быстрый вариант решения.

Вы точно подписались на канал?)
Вы точно подписались на канал?)

В общем, добро пожаловать на канал))