Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| |
Получи и скомпиль на с++ 26.11.01 15:16 Число просмотров: 1487
Автор: crk Статус: Незарегистрированный пользователь
|
> Да никаких траблов!!!! > > int a = x; > For(int i = 1; i < y; i++) > { > x=x*a; > }
а ошибка у меня была в x=x*x :)))
|
<programming>
|
[C] Алгоритм возведения числа в степень... 26.11.01 13:34 Штраф: 10
Автор: crk Статус: Незарегистрированный пользователь
|
Хелп... Вводим число(x), вводим степерь(y) и требуется чтобы число умножилось само на себя y-раз =)
Я что-то в цикле запутался ... хелп...
Только использовать <stdio.h> :) Никаких там pow(x,y) ;)))
|
|
Если есть там exp() и ln(). 26.11.01 23:14
Автор: Chingachguk <Chingachguk> Статус: Member
|
... То можно:
x^a = exp(a*ln(x))
|
|
[C++] Возведение в степень офигенных чисел 26.11.01 17:34
Автор: Biasha <Бяша> Статус: Member
|
Возведение a в n:
Пускай ni - i-ый бит с конца числа n (начиная с i=0).
Пускай pow(a, n) = a^n (а то замучусь).
Очевидно a^n = a^(n0*2^0 + n1*2^1 + ... + nk*k^k).
a^n = a^(n0*2^0) * a^(n1*2^1) * ... * a^(nk*2^k)
Пускай a[i] = a^(2^i)
Тоесть a^n - произведение a[i], таких, что ni=1
Осталось заметить a[i] = a^(2^i) = a^(2^(i-1) + 2^(i-1)) =
a^2^(i-1) * a^2^(i-1) = a[i-1] * a[i-1] = a[i-1]^2
А вот реализация:
inline int pow(int a, int n)
{
for (int ret=1; n>0; a*=a, n>>=1)
if (n&1)
ret *= a;
return ret;
}
---
Конечно, этот алгоритм есть смысл использовать только на чём-то много большем, чем int, хотя и на int он будет быстрее.
|
| |
[C++] Возведение в степень офигенных чисел 27.11.01 03:34
Автор: Korsh <Мельников Михаил> Статус: Elderman
|
> Возведение a в n: > Конечно, этот алгоритм есть смысл использовать только на > чём-то много большем, чем int, хотя и на int он будет > быстрее. Проще использавоть банальную рекурсию.
|
| | |
[C++] Возведение в степень офигенных чисел 27.11.01 04:36
Автор: Biasha <Бяша> Статус: Member
|
> Проще использавоть банальную рекурсию. Конкретней, пожалуйста... Что значит проще?
Куда уж проще то - один фор, один иф, 1 и, 1 умножить, 1 сдвиг, и оди "в квадрат".
Да и быстрее особо не придумаешь - разве что у меня можно n>>1 & 1 переделать в цикл по битам n - чтоб не сдвигать.
Ну, ещё последнее умножение - лишнее. Но это, чтоб пример не усложнять.
А чтоб код проще был - так проще for(i=0 ++i<n; result*=a); как ни крути :)
|
| | | |
[C++] Возведение в степень офигенных чисел 27.11.01 08:00
Автор: Korsh <Мельников Михаил> Статус: Elderman
|
> > Проще использавоть банальную рекурсию. > Конкретней, пожалуйста... Что значит проще? > Куда уж проще то - один фор, один иф, 1 и, 1 умножить, 1 > сдвиг, и оди "в квадрат". > Да и быстрее особо не придумаешь - разве что у меня можно > n>>1 & 1 переделать в цикл по битам n - чтоб не > сдвигать. > Ну, ещё последнее умножение - лишнее. Но это, чтоб пример > не усложнять. > А чтоб код проще был - так проще for(i=0 ++i<n; > result*=a); как ни крути :) Согласен
Ты кстати в ACM Programming Contest не учавствовал?
|
| | | | |
[C++] Возведение в степень офигенных чисел 27.11.01 20:53
Автор: Biasha <Бяша> Статус: Member
|
> Ты кстати в ACM Programming Contest не учавствовал? Я даже не знаю, что это такое :)
Подозреваю: соревнование. Единственное, в чём я участвовал по информатике - Киевская для школьников. Ужасная олимпиада, полный идиотизм. Участвовал только ради льгот при поступлении в вуз.
|
| | | | | |
[C++] Возведение в степень офигенных чисел 28.11.01 01:26
Автор: Korsh <Мельников Михаил> Статус: Elderman
|
> > Ты кстати в ACM Programming Contest не учавствовал? > Я даже не знаю, что это такое :) Правильно подозреваешь. Это мировая олимпиада по программированию среди студентов. месяц назад у нас(во Владивостоке) прошел четвертьфинал
по дальневосточному региону по северовосточной европе. Скоро полуфинал.
|
|
Получи и скомпиль на с++ 26.11.01 14:11
Автор: Pitbull Статус: Незарегистрированный пользователь
|
Да никаких траблов!!!!
int a = x;
For(int i = 1; i < y; i++)
{
x=x*a;
}
|
| |
Получи и скомпиль на с++ 26.11.01 15:16
Автор: crk Статус: Незарегистрированный пользователь
|
> Да никаких траблов!!!! > > int a = x; > For(int i = 1; i < y; i++) > { > x=x*a; > }
а ошибка у меня была в x=x*x :)))
|
| |
Для возведения в степень положительных оснований 26.11.01 15:09
Автор: Cyril <sc> Статус: Member
|
#include <stdio.h>
#include <math.h>
float DoPow(float a, float x){
if (a >= 0) return exp(x*log(a));
else return 0; // сорри, но как умножить отрицательное число я не знаю
}
int main(void){
printf("%f",DoPow(3,3));
return 0;
}
P.S. crk - пора пользоваться своей головой !
|
| | |
Для возведения в степень положительных оснований 26.11.01 20:06
Автор: nnnn Статус: Незарегистрированный пользователь
|
> #include <stdio.h> > #include <math.h> > > float DoPow(float a, float x){ > if (a >= 0) return exp(x*log(a)); > else return 0; // сорри, но как умножить отрицательное > число я не знаю > } > > int main(void){ > printf("%f",DoPow(3,3)); > return 0; > } > > P.S. crk - пора пользоваться своей головой !
a u tebya manual est' ? :))))
|
| | |
Спасибо! 26.11.01 15:15
Автор: crk Статус: Незарегистрированный пользователь
|
|
|
|