Формулировка. Даны натуральные числа x и n (которое также может быть равно 0). Вычислить xn.
Решение. Для того чтобы решить эту задачу, вспомним определение степени с натуральным показателем: запись xnозначает, что число x умножено само на себя n раз.
Сразу из определения видно, что здесь заранее известно количество повторений при вычислении результата, так что задача легко решается через цикл for. Выходит, мы копируем исходное число x в некоторую переменную res (от англ. result– «результат»), а затем просто умножаем его на x n раз? Не стоит торопиться с ответом.
Рассмотрим пример: 34 = 3 * 3 * 3 * 3 = 81. Если посмотреть на эту запись, то мы видим, что возведение в четвертую степень как выражение содержит четыре слагаемых, но только три операции, так как мы с первого шага домножаем число 3 на три тройки. Тогда реализация идеи из абзаца выше будет давать число в степени на 1 больше, чем требуется.
Какой можно придумать выход? Например, можно сократить цикл на одну операцию, но что тогда будет при вычислении нулевой степени? Как известно, любое число в нулевой степени дает 1, а здесь при вводе в качестве n нуля приведет к тому, что не будет осуществлен вход в цикл (так как не существует целочисленного отрезка от 1 до 0) и в итоге на выход так и пойдет исходное число x.
А что, если изменить схему умножения так: 34 = 1 * 3 * 3 * 3 * 3 = 81? Так мы можем сравнять показатель степени и число требуемых операций, да и с нулевой степенью все становится просто, так как при вводе в качестве n нуля не будет осуществляться вход в цикл и на выход в программе пойдет число 1!
Теперь алгоритм на естественном языке:
1) Ввод x и n;
2) Присваивание переменной res числа 1;
3) Запуск цикла, при котором i изменяется от 1 до n. В цикле:
- Присваиваем переменной res значение res * x;
4) Вывод переменной res.
Код:
- program Exponentiation;
- var
- x, n, i, res: word;
- begin
- readln(x, n);
- res := 1;
- for i := 1 to n do begin
- res := res * x
- end;
- writeln(res)
- end.
Кстати, стоит понимать, что объявление переменной res при использовании типа word достаточно условно, так как этот тип принимает значения от 0 до 65535, что на единицу меньше числа 2562, хотя вводить в программу можно числа, предполагающие возведение в более высокую степень. Так как в условии задачи не сказано ничего о том, в каком числовом промежутке по x и n она должна выдавать корректный ответ, оставим это в таком виде, достаточном для проверки приложения на работоспособность.