C/C++

Создать функцию, которая возводит число в степень.Запрещено использовать функцию возведения в степень.

Создать функцию, которая возводит число в степень. В функции два аргумента. Первый аргумент - число, которое нужно возвести в степень. Второй аргумент - степень числа. Реализовать через умножение. правильным ли будет такое решение



функция Функция1 (параметр)
// возврат параметр * параметр
//конецфункции
// сообщить (функция1(3));
Программа с функцией быстрого возведение вещественного числа в целую степень:
 def fastExp(x, n): 
if n == 0:
return 1.0
elif n < 0:
return 1.0 / fastExp(x, -n)
else:
return x*fastExp(x, n-1) if n&1 else fastExp(x, n//2)**2
while True:
x, n = input('x n: ').split()
x, n = float(x), int(n)
print(fastExp(x, n))
Для вещественных показателей степеней алгоритм, естественно, совсем другой.
ОК
Олег Колпаков
66 572
Лучший ответ
Олег Колпаков Ой, я даже внимания не обратила, что рубрика то С/С++, хотя алгоритм всё равно такой, как написано, хотя можно, конечно, и убрать рекурсивный вызов. А для вещественных основания и показателя степени надо просто использовать формулу
x^y = exp(y •㏑ x).
Олег Колпаков
 #include  
#include
using namespace std;
double exp(double x)
{
if (x < 0.) return 1. / exp(-x);
double s = 1., p = s, q = 0.;
while (p / s > 1e-17)
{
q += 1.;
p *= x / q;
s += p;
}
return s;
}

double ln(double x)
{
if (x < 1.) return - ln(1. / x);
double a = (x - 1.) / (x + 1.),
b = a * a, p = a, s = a, q = 1., e = q;
while (e > 1e-17)
{
q += 2.; p *= b;
e = p / q; s += e;
}
return 2. * s;
}
double f(double x, double y)
{
if (x == 0.)
if (y > 0.) return 0.;
if (y == 0.) return 1.;
return exp(y * ln(x));
}
int main()
{
double x, y;
while (true)
{
cout > x >> y;
cout
Олег Колпаков Это пример с вещественной функцией f(x,y) вещественных аргументов х и у, неполностью соответствующей функции pow(x,y) из модуля cmath.
Да, лучше использовать быстрый алгоритм. Но рекурсия не требуется:
 double pown(double x, int n) {
if (n < 0) {
x = 1.0 / x;
n = -n;
}
double res = 1.0;
for (; n; n >>= 1, x *= x) {
if (n & 1) { res *= x; }
}
return res;
}
Макс Неспящий
Макс Неспящий
90 348
Функция возведения числа в целую положительную степень.
 #include  
using namespace std;
double upow(double x, unsigned y) {
auto m = 1.0;
for (auto i = 0U; i < y; ++i) m *= x;
return m;
}
int main() {
auto x = 5.0;
auto y = 3U;
auto p = upow(x, y);
cout
У тебя получается возведение числа в квадрат. А если надо в степень 5? Или в 10?
На школьном уровне хватит с целыми положительными степенями разобраться, а если уж совсем "высшим пилотажем" - ещё с 0 и с отрицательными. Так-то можно ещё с дробными, но как - этого в школах не проходят, институтский курс
Рустам Экаев
Рустам Экаев
83 333
 int power(int a, int n) { 
if (n == 0) {
return 1;
} else {
return a * power(a, n - 1);
}
}
Сергей Кожин красиво, но не уверен, что спрашивающий понимает рекурсию
Rahman Alimbetov Тут ещё нюанс: нигде в задании не написано, что показатель степени - натуральный, или хотя бы целый.
int power (int a,int b)
{int c = 1;
for (int i = 0; i<b;i++)
{c=c*a};
return c;
}
как-то так. мог накосячить, писал прямо тут, да и уже несколько лет ничего не писал
Botirbek Еrgashev
Botirbek Еrgashev
84 925
а если степень больше двойки? там через цикл скорее всего надо
нет, правильным такое решение не будет.
в условии у функции 2 аргумента, в вашем решении 1.

Похожие вопросы