Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/22: Рейтинг темы: голосов - 22, средняя оценка - 4.73
GhostVIRUS
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
#1

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

11.11.2011, 01:03. Просмотров 4049. Ответов 18
Метки нет (Все метки)

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

Возведение в степень
Почему, когда я пытаюсь возвести в квадрат x с типом int, то получается 24, а...

Возведение в степень
Срочно, помогите записать выражение cos^4(x)

Возведение в степень
Вам конечно это покажется тупой проблемой, но всё же. Напишите пожалуйста как...

Возведение в степень
подскажите,пожалуйста, способ реализации (алгоритм)операции возведение в...

Возведение в степень!
Определить {\chi }^{15} без использования функций и не более чем 5-ю...

18
alkagolik
Заблокирован
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;
}
1
alkagolik
Заблокирован
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;
}
1
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.
Надеюсь все что я тут накалякал, понятно...
0
Dar101
40 / 40 / 7
Регистрация: 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();
}
0
GhostVIRUS
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
11.11.2011, 12:34  [ТС] #6
Спасибо. Я уже и сам разобрался....
0
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 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;
}
3
-=ЮрА=-
11.11.2011, 13:04
  #8

Не по теме:

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

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

Не по теме:


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

Не по теме:

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

0
-=ЮрА=-
Заблокирован
Автор 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:rofl:
чтобы вы поняли что такое рекурсия см код выше;)Я даже скрин для Вас нарезал:popcorn::D

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

Не по теме:

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

0
Thinker
11.11.2011, 13:25
  #12

Не по теме:

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

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

Не по теме:

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

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

Не по теме:

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

Не по теме:

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

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

Не по теме:

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

0
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;
}
0
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.11.2011, 17:03 #17
Есть книжка касательно быстрого возведения в действительную степень:

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

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

возведение в степень
всем доброго времени суток, задача такая: возвести х в 10 степень, но вывод...

возведение в степень
помогите плиз! в файле есть задачка. нужно рекурсивно возвести в степень. Код:...

Возведение в степень
Подскажите почему не возводится в степень, а выдаёт ошибку:&quot;arguments to...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru