int pow(int val, unsigned int P)
{
int r = val;
for (unsigned int i=0; i<P; i++)
{
r = r*val;
}
return r;
}
Возведение в степень на С++
За раннее благодорю!:)
или реализуем собственными силами (для int):
Код:
А так?
Код:
int pow(int val, unsigned int P)
{
int r = val;
while (--P)
r *= val;
return r;
}
{
int r = val;
while (--P)
r *= val;
return r;
}
[COLOR="Gray"]Добавлено: нет, снова сорри, минус к беззнаковому типу... а ведь мог быть ноль, как-то не совсем "этично".[/COLOR]
что-то меня плющит сегодня целый день, пчхи..чий грипп наверное :)
Цитата:
А так?
+1, Все в норме.
[COLOR="Gray"]Не считая моих личных проблем с головой, хронически не люблю записей вида while(--P), когда-то пытался знакомому обьяснить, инкремент, постинкремент и.т.д. видимо так намучался, что сам зарекся писать малоняглядные новичку инструкции циклов... хотя в данном случае вопрос наглядности очень спорный, да и на обьявлении лишней переменной-счетчика сэкономили ;) +1[/COLOR]
Код:
result = exp(power * ln(base));
где power - степень, base - основание.
Код:
result = base << stepen_dvoiki;
Код:
int pow (int val, unsigned int P)
{
int r = 1; // Для степени = 0 результат будет 1
if (val != 0) // Если основание = 0, то цикл не выполняется
for (; P-- > 0;)
r *= val;
else r = 0;
return r;
}
{
int r = 1; // Для степени = 0 результат будет 1
if (val != 0) // Если основание = 0, то цикл не выполняется
for (; P-- > 0;)
r *= val;
else r = 0;
return r;
}
Правда остаётся открытым вопрос касательно переполнения :(
Можно и рекурсивно
Код:
int pow (int ar, unsigned int p)
{
if(!p) return 1;
else return ar*pow(ar,p-1);
}
{
if(!p) return 1;
else return ar*pow(ar,p-1);
}