В чем ошибка? должно число подводиться в степень за минимальное кол умножения не используя возведение в степень - 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.