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

Возвести натуральное число A в натуральную степень B

03.10.2017, 05:07. Показов 21230. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите программу, которая возводит натуральное число A в натуральную степень B .

Входные данные
Входная строка содержит два числа, A и B , разделённые пробелом. Гарантируется, что 1 ≤ A , B ≤ 1000 .

Выходные данные
Программа должна вывести одно число: A в степени B .

Примеры
входные данные
2 6
выходные данные
64
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.10.2017, 05:07
Ответы с готовыми решениями:

Возвести натуральное число в натуральную степень
Напишите программу, которая вводит натуральные числа A и N и вычисляет A N . По теме циклы ! Входные данные Входная строка содержит...

Как возвести дробное число в целую степень? К примеру 2,7 возвести в степень 2 на C++.
Как возвести дробное число в целую степень? К примеру 2,7 возвести в степень 2 на C++.

Если введенное число отрицательное и четное, то возвести его в 3 степень, иначе возвести в квадрат
Ввести целое число В. Если В отрицательное и четное, то возвести его в 3 степень, иначе возвести в квадрат

24
 Аватар для dopleref
42 / 52 / 33
Регистрация: 15.12.2015
Сообщений: 199
03.10.2017, 10:08
Вариант решения этой задачи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
using namespace std;
 
int main() {
    int a, b;
    int pow = 1;
    cout << "Enter A: ";
    cin >> a;
    cout << "Enter B: ";
    cin >> b;
    for (int i = 0; i < b; i++) {
        pow *= a;
    }
    cout << "A pow B: " << pow << endl;
    return 0;
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
03.10.2017, 11:55
dopleref, Вы обратили внимание на " 1 <= A, B <= 1000" ?
Как вы думаете, вычислит ли ваш код хотя бы 2999?
2
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
03.10.2017, 13:02
Цитата Сообщение от dopleref Посмотреть сообщение
int pow = 1;
Использование имен функций в качестве переменных - тоже плохая идея.
0
 Аватар для maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
03.10.2017, 13:03
Цитата Сообщение от Байт Посмотреть сообщение
Как вы думаете, вычислит ли ваш код хотя бы 2999
Да хотя бы 2 в 33, если тут инты.
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
03.10.2017, 13:35
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
#include <iostream>
using namespace std;
 
int main()
{
    int a, b;
    cin >> a >> b;
 
    const int maxsize = 500000;
    int mas[maxsize];
    mas[1] = 1;
 
    int c = 0, len = 1;
    for(int i = 1; i <= b; ++i)
    {
        for(int j = 1; j <= len; ++j)
            mas[j] = mas[j] * a + c,
            c = mas[j] / 10,
            mas[j] = mas[j] % 10;
 
        while(c > 0)
            len++,
            mas[len] = c % 10,
            c /= 10;
    }
 
    while(mas[len] == 0 && len > 1) len--;
 
    for(int i = len; i >= 1; i--) cout << mas[i];
 
    return 0;
}
1
 Аватар для dopleref
42 / 52 / 33
Регистрация: 15.12.2015
Сообщений: 199
03.10.2017, 14:08
Байт, COKPOWEHEU, согласен с замечаниями,
можно использовать более емкий тип данных и изменить название переменной,
что скажите по поводу самой идеи алгоритма?
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
03.10.2017, 14:35
Из стандартных типов число 10001000 выдержит разве что double, но он неточный. Тут уж зависит от задачи:
Если не нужна абсолютная точность, можно double и оставить.
А вот если надо получить все цифры то придется реализовывать математику вручную. Если не ошибаюсь (только мельком глянул), примерно это сделал no swear. Только из соображений красоты кода и повторного использования лучше бы обернуть реализацию соответствующим классом с методами присвоения, умножения и вывода как минимум.
Сам алгоритм умножения числа самого на себя нужное число раз самый простой - почему бы и нет.
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
03.10.2017, 14:52
COKPOWEHEU, Я вообще хочу создать один большой класс для работы с длинными числами но рука всё не доходит сделать такое, универ всё время пожирает. Да из длинной арифметики мне ещё есть чему учиться, например извлечения корня, деления длинного на длинное, а так вроде база есть для создание хорошего класса
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
03.10.2017, 15:38
no swear, когда доведете задуманное до конца, не сможете воспользоваться этим в школьных задачах - получится слишком сложно и накручено (а иначе никак) и учитель ни за что не поверит что ученики сами такое написали ради одного задания.
В каком формате планируете хранить данные - в двоичном, двоично-десятичном (BCD) или десятичном?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
03.10.2017, 15:48
Цитата Сообщение от dopleref Посмотреть сообщение
что скажите по поводу самой идеи алгоритма?
Идея совершенно тривиальна и совершенно лобовая. И никакого интереса не представляет.
Вот так хоть чуть-чуть интереснее
C++
1
2
3
4
5
6
int powx(int n, int p)
{
   if (p==0) return 1;
   if (p==1) return n;
   return powx(n, p/2)*powx(n, p - p/2);
}
Тоже не открытие Америки, но хоть чуток побыстрее

Добавлено через 6 минут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Из стандартных типов число 10001000 выдержит разве что double,
Не-а. Не выдержит...
Да и очевидно (и по другим задачам ТС), что речь идет именно о длинной арифметике. И нужны точные результаты.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
учитель ни за что не поверит что ученики сами такое написали ради одного задания.
Если ученик сможет показать свое понимание используемой техники, так почему и не поверить? А если учитель не поверит и в этом случае, то ему (учителю) лучше сменить профессию
Или вам в жизни так не везло с учителями?

Добавлено через 3 минуты
Цитата Сообщение от no swear Посмотреть сообщение
Я вообще хочу создать один большой класс для работы с длинными числами
Только удачи вам можно пожелать
ЗЫ. Код ваш из поста 9 подробно не смотрел. Сами скажите - Тестировали? Работает?
1
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
03.10.2017, 16:00
Байт, в полноценном классе длинных чисел будет реализована куча дополнительных операций, ненужных для данной конкретной задачи. А учитель обычно знает на что способны ученики и если в классе тупит над задачей поиска максимума, а в качестве Д/З приносит такое, да еще нормально отформатированное (вот что без комментариев это как раз норма - надеемся, no swear учтет в "релизе"). Тут придется здорово попотеть чтобы доказать авторство. Это в случае хорошего учителя, конечно.
Цитата Сообщение от Байт Посмотреть сообщение
Не-а. Не выдержит...
Да, посмотрел диапазоны - он всего до 10308 держит.
Цитата Сообщение от Байт Посмотреть сообщение
Или вам в жизни так не везло с учителями?
Напротив, хотя информатика никогда не была профильной. Но неадекватных учителей в стиле "в книжке написано так, а твой код не похож, даже проверять не буду" к счастью не попадалось.
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
03.10.2017, 17:11
Цитата Сообщение от Байт Посмотреть сообщение
Код ваш из поста 9 подробно не смотрел. Сами скажите - Тестировали? Работает?
Тесты с онлайн проверкой проходит спокойно и в лимит времени укладывается и по памяти тоже всё ок. Онлайн проверку можно пройти по таким сайтам: тимус, acmp, informatics.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В каком формате планируете хранить данные - в двоичном, двоично-десятичном (BCD) или десятичном?
Тот код который я отправил хранит данные в 10 основании т е в одной ячейке массива 1 цифра, с двоичным не писал, но писал с 10'000 основанием почти все операции (+, -, *, div, mod).
Двоично - десятичный что ещё за формат такой?
1
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
03.10.2017, 17:46
Цитата Сообщение от no swear Посмотреть сообщение
Двоично - десятичный что ещё за формат такой?
https://ru.wikipedia.org/wiki/... тичный_код
Запись цифр числа в двоичном виде. Похоже на сохранение числа в виде строки, но компактнее.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
03.10.2017, 19:06
Цитата Сообщение от no swear Посмотреть сообщение
Тот код который я отправил хранит данные в 10 основании
Я про финальную версию. Там ведь могут возникнуть проблемы с размером.
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
03.10.2017, 22:16
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Я про финальную версию. Там ведь могут возникнуть проблемы с размером
Проблемы с размером будут возникать всегда, но можно смягчить ситуацию использовав массив с 10'000 основанием тогда длина каждой ячейки массива будет равна 4 т е 4 цифры в одной ячейке массива и если взять к примеру массив размера 100'000 то максимальная длина числа которая будет храниться в этом массиве будет не 100'000 а 400'000 потому что я буду использовать 10'000 основание которая в свою очередь приведёт к увеличению длины числа в 4 РАЗА!
1
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
03.10.2017, 23:04
Можно взять 200 для uint8_t, полезный объем 78%, можно взять 60000 для uint16_t, будет 91%, можно 4`000`000`000 для uint32_t, будет 93%. Если привести к 8 байтам, будет соответственно 14%, 70% и 86%
Для степеней 10 эффективность использования такова: 100/uint8_t -> 39% ; 10000/uint16_t -> 15%, 1`000`000`000/uint32_t -> 23%. Приведение к 8 байтам дает 0,05%, 0,05% и 5.4%
Двоично-десятичная запись это 1 или 2 цифры на байт, то есть 4% или 39%. Приведение к 8 байтам дает 5е-10% и 0,05%.
Предлагаю помедитировать над этими цифрами.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
03.10.2017, 23:09
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Там ведь могут возникнуть проблемы с размером.
Проблемы с размером могут возникнуть всегда. Ведь мы пытаемся решить потенциально бесконечную задачу на конечном автомате. Наше дело - оттянуть свое фиаско (которое неизбежно), как можно дальше.

Добавлено через 4 минуты
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Предлагаю помедитировать над этими цифрами.
Это не та медитация (точнее - не над тем), которая нам была бы интересна
Хотя безусловно, любая медитация - дело полезное.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
04.10.2017, 01:23
При разработке любой программы надо выдержать баланс между ее сложностью (скоростью разработки), скоростью, объемом, надежностью и переносимостью. В случае больших чисел проблема объема несколько важнее скорости работы. Но и кидаться на двоичное представление (использующее вообще всю доступную память) не стоит - оно может оказаться неподъемным для программиста (я, например, слабо представляю себе вывод подобных чисел). Поэтому придется выбрать относительно простые в реализации варианты, а из них - оптимальные по занимаемой памяти и сложности алгоритмов (или скорости выполнения).

Не по теме:

Что-то мне подсказывает, что я как-то непонятно написал. Видать, не любая медитация полезна

0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
04.10.2017, 09:01
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
слабо представляю себе вывод подобных чисел
Тоже не бином Ньютона! Если есть операция взятия остатка от деления длинного на короткое, то стандартная процедура перевода в 1000-ичную с/с "столбиком". При этом выводимое легко и естественно разбивается на триады.
У меня даже где-то завалялась программка записи большого числа "прописью". Правда, не очень большого. Просто я не знаю названий чисел далее септалиона. А алгоритм конструирования этих названий мне ухватить не удалось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.10.2017, 09:01
Помогаю со студенческими работами здесь

Возвести число в степень
Дано натуральное n. Написать программу вычисления a^n(&quot;а&quot; в степени n)

Как возвести число в степень
Как возвести число в степень ???

Возвести число в a степень 7 за 4 операций
Нужно использовать только операцию умножения #include &lt;iostream&gt; using namespace std; int main() { double a,b; cin...

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

Возвести число в (7) семизначную степень
Подскажите пожалуйста, как можно реализовать данную функцию? К примеру необходимо число 2 возвести в 1234567 степень. Проблема заключается...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru