Форум программистов, компьютерный форум CyberForum.ru

Возведение в степень - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.81
GhostVIRUS
 Аватар для GhostVIRUS
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
11.11.2011, 01:03     Возведение в степень #1
Дано число n и его нужно возвести в степень s. Можно ли это как-то сделать не используя циклы. Заранее спасибо...
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2011, 01:03     Возведение в степень
Посмотрите здесь:

Возведение в степень C++
C++ Возведение в степень. C++
C++ возведение в степень!
C++ Возведение в степень!
возведение в степень C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
11.11.2011, 01:07     Возведение в степень #2
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int rekur_pow(int n, int m, int s){
    while (s > 1)
        return (rekur_pow(n * m, m, s - 1));
}
 
int main ()
{
    printf("%d\n", rekur_pow(2, 2, 5));
    return 0;
}
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
11.11.2011, 01:13     Возведение в степень #3
C
1
2
3
int rekur_pow(int n, int m, int s){
    return (s > 1) ? rekur_pow(n * m, m, s-1) : n;
}
GhostVIRUS
 Аватар для GhostVIRUS
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
11.11.2011, 12:05  [ТС]     Возведение в степень #4
Хм... Выбивает ошибку...

Добавлено через 10 минут
Ладно скорее я так решение не найду. Поставлю конкретно вопрос...
Число записано в массиве c[18] по цифрам. Количество цифр известно и записано в переменной numbers. 2<n<10.
Нужно проверить равность выражения
c[0]*n в степени n-1 + c[1]*n в степени n-2 + c[2]*n в степени n-3 + ... + c[numbers-1]*n в степени n-n переменной a.
Надеюсь все что я тут накалякал, понятно...
Dar101
 Аватар для Dar101
40 / 40 / 1
Регистрация: 12.05.2011
Сообщений: 109
11.11.2011, 12:23     Возведение в степень #5
Если нужно просто возвести в степень, не сильно разбираясь, что там внутри, можно и библиотеку подключить. Дальше разберётесь?
*В примере 3^2=9.
C++
1
2
3
4
5
6
7
8
#include <conio.h>
#include <math.h>
#include <iostream>
int main()
{
    std::cout << pow(3.0,2.0);
    getch();
}
GhostVIRUS
 Аватар для GhostVIRUS
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
11.11.2011, 12:34  [ТС]     Возведение в степень #6
Спасибо. Я уже и сам разобрался....
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.11.2011, 12:36     Возведение в степень #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от GhostVIRUS Посмотреть сообщение
Спасибо. Я уже и сам разобрался....
А как на счет быстрого (бинарного) возведения в степень:

C++
1
2
3
4
5
6
7
8
9
10
11
12
long Pow(long a, unsigned int n)
{
   long deg = a, rez = 1;
   while (n)
   {
      if (n & 1)
         rez *= deg;
      deg *= deg;
      n >>= 1;
   }
   return rez;
}
-=ЮрА=-
11.11.2011, 13:04
  #8

Не по теме:

Цитата Сообщение от GhostVIRUS Посмотреть сообщение
Можно ли это как-то сделать не используя циклы.
Цитата Сообщение от Thinker Посмотреть сообщение
while (n)
* *{
- а так прикольный алгоритм

Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.11.2011, 13:09     Возведение в степень #9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение

Не по теме:


- а так прикольный алгоритм

Не по теме:

А, точно, человеку рекурсия нужна, половину прочитал задание, спасибо

-=ЮрА=-
Заблокирован
Автор FAQ
11.11.2011, 13:14     Возведение в степень #10
GhostVIRUS, этот код позволят производить целочисленное возведение в степень
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
long my_pow(long val, long pwr)
{
    long res = val;
    if(1 < (pwr--))
        res *= my_pow(val, pwr);
    return res;
}
 
int main()
{
    long val;
    long pwr;
    cout<<"Enter value : ";cin>>val;
    cout<<"Enter power : ";cin>>pwr;
    cout<<my_pow(val, pwr)<<endl;
    system("pause");
    return 0;
}

Не по теме:

PS:

Цитата Сообщение от alkagolik Посмотреть сообщение
int rekur_pow(int n, int m, int s){
* * * * return (s > 1) ? rekur_pow(n * m, m, s-1) : n;
}
да уж три значения чтобы возвести 5 в квадрат я так понял нужно ввести 5,2,2
чтобы вы поняли что такое рекурсия см код вышеЯ даже скрин для Вас нарезал

Миниатюры
Возведение в степень  
-=ЮрА=-
11.11.2011, 13:20
  #11

Не по теме:

Thinker, без ножей которые иногда у нас с вами проскакивают, можите мне помочь с алгоритмом быстрого возведения дабл в дабл???От меня кроме плюсика и + отзыв, честно неохота искать, я знаю что в подобных алгоритмах вы спец

Thinker
11.11.2011, 13:25
  #12

Не по теме:

-=ЮрА=-, да какие там ножи, я миролюбивый человек Если честно, то double в степени double даже не думал как это будет без разложения в ряд. Вот double в int это тоже самое, что и в прежнем алгоритме. А может быстрее pow() уже и нельзя написать алгоритм

-=ЮрА=-
11.11.2011, 13:29
  #13

Не по теме:

Цитата Сообщение от Thinker Посмотреть сообщение
А может быстрее pow() уже и нельзя написать алгоритм
- я тоже склонясь к этому, но всё же для расширения кругозора хотелось бы знать, надо погуглить

Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.11.2011, 13:30     Возведение в степень #14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение

Не по теме:

- я тоже склонясь к этому, но всё же для расширения кругозора хотелось бы знать, надо погуглить

Не по теме:

Вы меня прям заинтересовали этим алгоритмом

-=ЮрА=-
11.11.2011, 14:31
  #15

Не по теме:

Thinker, я тут подумал
y = pow(x,z)
ln(y) = z*ln(x)
Тогда у = exp(z*ln(x)) -выходит нужен быстрый алгоритм для exp и быстрый алгоритм для ln
Как по мне вроди как логично

GhostVIRUS
 Аватар для GhostVIRUS
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
11.11.2011, 16:59  [ТС]     Возведение в степень #16
Спасибо всем за помощь...
Я писал код определения модуля системы исчисления:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
 
using namespace std;
 
_int64 a, b = 0;
short int c[18];
short int numbers = 0;
 
int rekuw_pow(short int number, short int power);
 
int main()
{
    cout << "Input numbers: ";
    cin >> a >> b;
 
    for(short int i = 0; b != 0; i++, b=b/10)
    {
        c[i] = b%10;
        numbers++;
    }
 
    for(short int j = 0; j < numbers; j++)
    {
        cout << c[j];
    }
    cout << endl;
 
    for(short int n = 2; n < 10; n++)
    {
        _int32 tempA = 0;
        cout << "For module " << n << endl;
        for(short int i = 1; i<numbers; i++)
        {
            tempA = tempA + c[i] * rekuw_pow(n, numbers-i);
            cout << c[i] * rekuw_pow(n, numbers-i) << " ";
        }
        tempA = tempA + c[numbers-1];
        cout << c[numbers-1];
        cout << endl;
        if(tempA == a)
        {
            cout << endl << n << endl;
            break;
        }
    }
 
    return 0;
}
 
int rekuw_pow(short int number, short int power)
{
    _int32 tempNum = 1;
    for(int i = 0; i < power; i++)
        tempNum = tempNum * number;
    return tempNum;
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.11.2011, 17:03     Возведение в степень #17
Есть книжка касательно быстрого возведения в действительную степень:

Максим М. Гумеров. Возведение числа в действительную степень.

но скачивать и читать пока нет времени. Если кто решится почитать, жду комментариев.
Так то я знаю как это сделать, но думаю, что это не очень эффективно, сегодня только над этим вопросом задумался немного.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
11.11.2011, 21:15     Возведение в степень #18
Thinker, для решения вопроса о реализации степени с плавающей точкой рекомендую вам ознакомиться с GNU библиотеками gmp, mpfr, mpc. Там все это есть, но не уверен что они корректно станут на ОС виндовс (подчеркиваю - не уверен что станут, а не уверен что не станут). Поэтому есть прекасный повод поставить дружелюбный линукс и начать осваивать бесчисленное множество различных библиотек (читая при этом их исходники).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2011, 07:59     Возведение в степень
Еще ссылки по теме:

Возведение в степень C++
C++ возведение в степень
Возведение в степень C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
silent_1991
12.11.2011, 07:59     Возведение в степень
  #19
 Комментарий модератора 
Закончили.
Yandex
Объявления
12.11.2011, 07:59     Возведение в степень
Ответ Создать тему
Опции темы

Текущее время: 06:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru