Программа несложная, однако, чтобы сильно “не мельчить”, разбил решение на два скриншота.
Описание работы программы
Как хранить большое число
Поскольку число из задания (2 в 1000-й степени) будет состоять из нескольких сотен цифр, потому в обычный тип данных оно заведомо не влезет. Однако нам необходимо будет хранить как промежуточные результаты, так и конечное число. Самым простым способом в итоге будет разбить число на отдельные цифры и хранить их в массиве.
Возводим число в степень
Что такое 2 в 1000-й степени? Это просто число 2 умноженное само на себя 1000 раз. Потому заменим возведение в степень на умножение.
Алгоритм будет следующий (смотрите скриншот выше):
Каждая цифра в массиве (каждая цифра числа) умножается на два.
При этом, если число в ячейке получается двузначным, то младший регистр числа (единицы) сохраняются в нее, а старший (десятки) переносится и прибавляется к числу в следующей ячейке.
Таким образом за 999 проходов по массиву число возводится в 1000-ную степень.
Искомая сумма цифр числа находится за один проход по массиву просто сложением.
Измеряем время работы программы
Для измерения времени работы программы подключаем библиотеку time.h:
#include <time.h>
С помощью функции clock() измеряем время начала (begin) и окончания (end) работы программы. В итоге время работы будем находить как разность между ними.
CLOCKS_PER_SEC – это константа, сохраненная в библиотеке и зависящая от типа устройства, на котором запускается программа. В данном случае – это просто 1000
Ответ и скорость работы программы (проект Эйлера - 16 задача)
В итоге ответ на 16 задачу проекта Эйлера составил 1366, программа считает ответ практически мгновенно 1-2 миллисекунды.
По традиции хотелось бы выразить глубочайшую признательность Сергею Балакиреву за его титанический труд по созданию бесплатных курсов и в частности, за “Язык программирования C/C++ для начинающих“.
Есть вопросы, господа? Отвечаем спокойно, четко и только по делу))