Возведение числа в степень без использования операторов и функций

Задание 3

Написать цикл для возведения числа в степень не пользуясь оператором (**). Пользователь вводит число и степень, в которую нужно возвести данное число.

//Задание 3
//Написать цикл для возведения числа в степень не пользуясь оператором (**). Пользователь вводит число и степень, в которую нужно возвести данное число.
let counter3 = 2;
let number3 = +prompt("Введите число");
let degree = +prompt("Введите степень");
let result3 = number3;
  if (degree == 0)
  {alert ("Результат: 1")}
  
  else if (degree == 1)
  {alert ("Результат: "+number3)}
  
    else if (degree > 1)
    {
    while (counter3 == degree)
    {
      result3 = number3
      result3 = result3 * number3
      counter3++
    }
    alert ("Результат: "+result3);
    }

я только начал изучать JS, подскажите варианты записи данного цикла и/или подскажите, как оперируя переменной result3 "зациклить" код на умножение result3 на number3 n-ное количество раз через оператор while. очевидно, ошибки в коде связаны именно с вводом и обработкой переменной result3


Ответы (2 шт):

Автор решения: Kirill

function pow(number, power) {
    if (power === 0) return 1;
    if (number === 0) return 0;
    if (number === 1) return 1;
  
    let result = 1;
    while (power !== 0) {
      result = result * number;
      power = power - 1;
    }
  
    return result;
}

const number = +prompt("Введите число");
const degree = +prompt("Введите степень");

alert ("Результат: " + pow(number, degree));

/* tests */
/* console.log(pow(2, 10), '=== 1024')
console.log(pow(2, 0), '=== 1')
console.log(pow(2, 1), '=== 2')
console.log(pow(0, 0), '=== 1')
console.log(pow(5, 0), '=== 1')
console.log(pow(10, 3), '=== 1000') */

→ Ссылка
Автор решения: Александр Никитин
  1. Ты выполняешь цикл пока (counter3 == degree) при условии что после каждой итерации counter3 увеличивается, таким образом у тебя цикл будет выполнятся только при условии что счетчик равен степени и то один раз, то есть он будет срабатывать только если ты 2 возводишь в степень 2

  2. В начале цикла у тебя стоит следующее result3 = number3, то есть ты на каждой итерации цикла результату присваиваешь введенное число.

немного подкорректированный твой код

let number3 = +prompt('Введите число');
let degree = +prompt('Введите степень');
let result3 = number3;
if (degree == 0) {
    alert('Результат: 1');
} else if (degree == 1) {
    alert('Результат: ' + number3);
}
while (degree > 1) {
    // result3 = number3;
    result3 = result3 * number3;
    console.log(degree, result3);
    degree = degree - 1;
}
alert('Результат: ' + result3);

более аккуратный вариант

const handlerDegree = (number, degree) => {
    let result = 1;

    while (degree) {
        result = number * result;
        degree = degree - 1;
    }

    return result;
};

const result = handlerDegree(2, 3);
alert(`Результат: ${result}`);

Или через рекурсию

function handlerDegree(number, degree) {
    return degree ? number * handlerDegree(number, degree - 1) : 1;
}
alert(handlerDegree(5, 3));

p.s лучше использовать строгое сравнение === вместо ==

→ Ссылка