3мес



Программирование
+3Быстрое возведение в степень на c++
Быстрое возведение в степень
Возводить в степень можно гораздо быстрее, чем за n
умножений! Для этого нужно воспользоваться следующими рекуррентными соотношениями:
an=(a2)n/2
при чётном n
,
an=a⋅an−1
при нечётном n
.
Реализуйте алгоритм быстрого возведения в степень. Если вы всё сделаете правильно, то количество умножений будет иметь порядок log2n
.
Нельзя использовать встроенную операцию возведения в степень; в силу особенностей тестирующей системы избегайте слова pow в названии функции.
Входные данные
Вводится действительное число a
и целое неотрицательное число n
.
Выходные данные
Выведите ответ задачи.
Примеры
Ввод
2
7
Вывод
128
Ввод
1.00001
100000
Вывод
2.71827 на c++ без pow в названии функции
По дате
По рейтингу
1234567891011
#include <iostream>
using namespace std;
int main() {
double x, p = 1.0;
unsigned n;
cin >> x >> n;
for (; n; n /= 2, x *= x) { if (n % 2) { p *= x; } }
cout << p;
}
Если нужна отдельная функция, то:
123456789101112
double pwr(double x, unsigned n) {
double p = 1.0;
for (; n; n /= 2, x *= x) { if (n % 2) { p *= x; } }
return p;
}
int main() {
double x;
unsigned n;
cin >> x >> n;
cout << pwr(x, n);
}
12345678910111213141516171819202122
#include <iostream>
using namespace std;
double fast_power(double a, int n) {
if (n == 0) return 1;
if (n % 2 == 0) {
double half = fast_power(a, n / 2);
return half * half;
} else {
return a * fast_power(a, n - 1);
}
}
int main() {
double a;
int n;
cin >> a >> n;
cout << fast_power(a, n) << endl;
return 0;
}
Больше по теме