Возведение числа в степень без использования операторов и функций
Задание 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 шт):
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') */
Ты выполняешь цикл пока (counter3 == degree) при условии что после каждой итерации counter3 увеличивается, таким образом у тебя цикл будет выполнятся только при условии что счетчик равен степени и то один раз, то есть он будет срабатывать только если ты 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 лучше использовать строгое сравнение === вместо ==