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

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

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

Дано число n и его нужно возвести в степень s. Можно ли это как-то сделать не используя циклы. Заранее спасибо...
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2011, 01:03
Ответы с готовыми решениями:

Вычислить сумму чисел от 1 до N, возведенных в степень M. Возведение в степень оформить как многократное умножение
Не знаю как это написать.. или объясните пожалуйста или помогите сделать)

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

Возведение в степень
Совсем недавно начал изучать C++. Учу по книге. Было задание: Вводишь число Вводишь степень в...

Возведение в степень
Здравствуйте, нужно возвести константу "e" в степень -x-2, может кто-нибудь подскажет как это...

18
Заблокирован
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
Заблокирован
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
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
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
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
11.11.2011, 12:34  [ТС] 6
Спасибо. Я уже и сам разобрался....
0
Эксперт С++
4254 / 2228 / 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
Эксперт С++
4254 / 2228 / 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
Эксперт С++
4254 / 2228 / 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
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
Эксперт С++
4254 / 2228 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.11.2011, 17:03 17
Есть книжка касательно быстрого возведения в действительную степень:

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

но скачивать и читать пока нет времени. Если кто решится почитать, жду комментариев.
Так то я знаю как это сделать, но думаю, что это не очень эффективно, сегодня только над этим вопросом задумался немного.
0
Заблокирован
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
Привет! Вот еще темы с ответами:

Возведение в степень
Подскажите оператор для возведения числа в n-ую степень. Зарание спасиба

возведение в степень!
Кто помнит функцию возведения в степень.?? &quot;трам-пам-пам&quot; (a,b) ???? Добавлено через 3 минуты...

Возведение в степень!
Возник вопрос - Возможно пока не понятна в чем мысль! Попробую на примере объяснить!...

Возведение в степень
Вот есть программа, работает только, для положительной степени. Помогите разобрать что не так? pow...


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

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

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