Замена функции Pow - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, можно ли как-то иначе заменить функцию Pow?
#include <stdio.h>
#include <math.h>
 
//Замена Pow
double Ext (int x, int n) {
    int ext = 1, i;
    for (i = 1; i <= n; i++) {
        ext *= x;
    }
    return ext;
}
 
double Sum(int n) {
    double sum = 0;
    for (int i = 2; i <= n; i++) {
        sum += Ext(-1, i) * (i/(Ext(i, 3) - i));
    }
    return sum;
}
 
int main(int argc, const char * argv[]) {
    int n;
    printf("n = "); scanf("%d", &n);
    printf("sum = %.10f\n", Sum(n));
    return 0;
}

Решение задачи: «Замена функции Pow»

textual
Листинг программы
int power_recursive(int x, unsigned int n) {
    return n == 0 ? 1 : x * power_recursive(x, n - 1);
}
 
int power_effective(int x, unsigned int n) {
    int p = 1;
    while (n) {
        if (n & 1) { p *= x; }
        n >>= 1;
        x *= x;
    }
    return p;
}

Объяснение кода листинга программы

  1. В функции power_recursive происходит рекурсивный вызов функции power_recursive с аргументами (x, n-1).
  2. Если n равно 0, то возвращается 1.
  3. В функции power_effective инициализируется переменная p равной 1.
  4. Затем в цикле while происходит проверка бита n на 1.
  5. Если бит n равен 1, то переменная p умножается на x.
  6. Значение n сдвигается вправо на 1 бит.
  7. Значение x умножается на x.
  8. Цикл продолжается до тех пор, пока n больше 0.
  9. По завершении цикла возвращается значение переменной p.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5
Похожие ответы