В чем ошибка? должно число подводиться в степень за минимальное кол умножения не используя возведение в степень - C (СИ)
Формулировка задачи:
должно число подводиться в степень за минимальное кол умножения не используя возведение в степень. Помогите, что не так? И почему? Спасибо за внимание!!!
#include#include #include int main() { int k, m, n; printf("n"); scanf("%d", &n); printf("k"); scanf("%d", &k); m = n; if ((k / 2) != 0) { k = k - 1; } for (i = 0; i < k / 2; i++) { m *= m; } else { for (i = 0; i < k / 2; i++) { m *= m; } getch(); } }
Решение задачи: «В чем ошибка? должно число подводиться в степень за минимальное кол умножения не используя возведение в степень»
textual
Листинг программы
int powB(int x, int n) { if (n == 0) return 1; if (n == 1) return x; if (n % 2 == 0) return powB(x * x, n / 2); return x * powB(x, n - 1); }
Объяснение кода листинга программы
В данном коде реализована функция powB
, которая выполняет возведение числа x
в степень n
.
Вот список шагов, которые выполняются в этой функции:
- Если
n
равно 0, то функция возвращает 1. Это базовый случай, когда числоx
в степень 0 равно 1. - Если
n
равно 1, то функция возвращаетx
. Это базовый случай, когда числоx
в степень 1 равно самому числуx
. - Если
n
делится на 2 без остатка (т.е.n % 2 == 0
), то функция рекурсивно вызывает саму себя с аргументамиx * x
и(n / 2)
. Это делается для того, чтобы уменьшить степеньn
в два раза, так какn
дажечетное число. - Если ни одно из вышеперечисленных условий не выполняется, то функция возвращает
x
умноженное на результат рекурсивного вызова функцииpowB
с аргументамиx
и(n - 1)
. Это делается для того, чтобы уменьшить степеньn
на 1 и продолжать вычисления. Таким образом, данный код реализует алгоритм возведения в степень, который выполняет требуемые вычисления за минимальное количество операций, избегая использования встроенной функцииpow
илиpowf
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д