Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/47: Рейтинг темы: голосов - 47, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 30

Возведение в большую степень C++

26.11.2016, 12:18. Показов 9386. Ответов 10
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Требуется возвести число a в степень n. a и n подаются на вход в типе string. На данный момент я сделал только умножение длинных чисел, а вот как сделать возведение в неприлично большую степень - не знаю. Все что есть на данный момент:
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
 int main()
{
    string a,n;
    int *A, *B, *C, cc;
   // cin>>a;
    //cin>>n;
    a="11111111111548484544876466666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666664548484";
    n="11111111111111111111111111111111111111111111111111111115";
    A=new int [a.size()];
 
    for (int i=0; i<a.size(); i++)
        A[i]=a[a.size()-i-1]-'0';
 
//Умножение числа string само на себя 
    length = a.size() * 2 - 1 ;
    l=length;
    C=new int [length];
    for (int ix = 0; ix < length; ix++)
    {
        C[ix] = 0;
    }
 
    for (int ix = 0; ix < a.size(); ix++)
    {
        for (int jx = 0; jx < a.size(); jx++)
        {
            C[ix + jx] += A[ix] * A[jx];
        }
    }
 
    for (int ix = 0; ix < length-1; ix++)
    {
        C[ix + 1] +=  C[ix] / 10;
        C[ix] %= 10;
    }
 
    while (C[length] == 0)
        length-- ;
    for(int i=length-1; i>-1; i--)
        cout<<C[i];
 
    system("PAUSE");
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.11.2016, 12:18
Ответы с готовыми решениями:

Возведение числа в большую степень
Напишите программу, которая возводит 2 в введенную пользователем степень(Макс степень 2000)

Возведение дробного числа в большую степень
Есть закон биномиального распределения. Я смог разобраться с подсчетом числа сочетаний для больших n. Теперь проблема заключается в том,...

Возведение большого числа в большую степень
Появился вопрос. Реализовую алгоритм Диффи — Хеллмана и не могу возвести 300-значное число в 100-значную степень). Делать циклом - вообще...

10
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
26.11.2016, 13:00
Цитата Сообщение от Technika Посмотреть сообщение
На данный момент я сделал только умножение длинных чисел, а вот как сделать возведение в неприлично большую степень - не знаю.
А что такое возведение в степень как не последовательное умножение числа на исходное число?
0
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 30
26.11.2016, 13:05  [ТС]
При умножении в лоб исходное число не уместить в массив
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
26.11.2016, 13:17
Только чур я не отвечаю, если у Вас комп зависнет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
 
namespace mult = boost::multiprecision;
 
mult::cpp_int pow( mult::cpp_int number, mult::cpp_int power )
{
    auto _number = number;
    while( --power )
    {
        number *= _number;
    }
    return number;
}
 
int main()
{
    std::cout 
        << pow( mult::cpp_int("11111111111548484544876466666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666664548484"),
                mult::cpp_int("11111111111111111111111111111111111111111111111111111115") );
}
http://rextester.com/EGXM13510
0
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 30
26.11.2016, 13:28  [ТС]
Мне бы реализацию без библиотек сделать. И еще при подключении буста, VS 2008 говорит, что не такого файла.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
26.11.2016, 13:36
Цитата Сообщение от Technika Посмотреть сообщение
не такого файла.
Ну естественно, никакая IDE ещё не научилась сама к себе недостающие либы прикручивать.
Скачайте boost сначала, потом укажите путь к хедерам.
0
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 30
26.11.2016, 13:46  [ТС]
Такой вариант не подходит все-таки. Надо без сторонних библиотек.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
26.11.2016, 13:47
Цитата Сообщение от Technika Посмотреть сообщение
При умножении в лоб исходное число не уместить в массив
Вы думаете если возводить в степень сразу оно станет меньше?
0
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 30
26.11.2016, 13:51  [ТС]
Не понял. В моей программе новое число записывается поцифыерно в дин.массив C. Размерность этого массива равна длина строки a * на степень. Получается большое число, которое выходит за все диапазоны. 1) как сделать массив неограниченным? Т.е. пока памяти хватает. Если решить этот вопрос, то тогда я могу просто создать цикл и умножить исходное число сколько необходимо раз, предварительно разложив степень.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
26.11.2016, 14:41
Цитата Сообщение от Technika Посмотреть сообщение
1) как сделать массив неограниченным?
В С++ нет такого типа данных, как динамический массив.
Но есть std::vector, который как раз реализует поведение динамического массива.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
26.11.2016, 18:32
Цитата Сообщение от Technika Посмотреть сообщение
Не понял. В моей программе новое число записывается поцифыерно в дин.массив C.
во-первых не C, а C++. А во-вторых вы неправильно работаете с тем, что называете динамическим массивом.
ваш изначальный вопрос звучал так:
Цитата Сообщение от Technika Посмотреть сообщение
как сделать возведение в неприлично большую степень
уточнив, что сделали:
Цитата Сообщение от Technika Посмотреть сообщение
На данный момент я сделал только умножение длинных чисел
получается вы нас обманули?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.11.2016, 18:32
Помогаю со студенческими работами здесь

Возведение числа в большую степень (например 3^100)
Программа для возведения числа в большую степень. Так как число очень большой длинны не помещается ни в один стандартный тип, то для его...

Возведение двойки в большую степень (длинное число)
Добрый день всем, помогите пожалуйста разобраться с проблемой. необходимо возвести двойку в степень (в конечном итоге 2 в 512, например) ...

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

Как возвести 2 в большую степень?
Получить последовательность десятичных цифр числа 2^n, в которой n-целое, ввести с клавиатуры. Задачу решить в частности при n=200.

Алгоритмы возведения числа в большую степень.
Здраствуйте ещё раз, уважаемые программисты! Сразу извинюсь за столь надоедливость, но поймите меня правильно, помочь больше некому =(...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru