Аватар для Andrew_Montana
49 / 45 / 41
Регистрация: 12.10.2014
Сообщений: 234

Создать функцию вычисления степени числа с показателем (без использования функции pow)

18.10.2014, 02:00. Показов 16597. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создать функцию вычисления степени натурального числа с натуральным
показателем (без использования функции pow) и вычислить с ее помощью значения
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}^{x} и https://www.cyberforum.ru/cgi-bin/latex.cgi?{x}^{a} для введенных натуральных чисел а и х
// Помогите пожалуйста)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.10.2014, 02:00
Ответы с готовыми решениями:

Определить степень числа с целочисленным показателем, не используя функцию pow
Написать программу, которая определяет степень числа с целочисленным показателем, не используя функцию pow. a^k, где к может быть...

Составьте программу вычисления степени числа а с натуральным показателем n
Составьте программу вычисления степени числа а с натуральным показателем n. (Записать варианты программы с разными видами циклов while,for).

Составьте программу вычисления степени числа а с натуральным показателем n
Составьте программу вычисления степени числа а с натуральным показателем n

5
Модератор
Эксперт С++
 Аватар для zss
13761 / 10957 / 6488
Регистрация: 18.12.2011
Сообщений: 29,218
18.10.2014, 10:14
Лучший ответ Сообщение было отмечено Andrew_Montana как решение

Решение

Эта задача на форуме встречалась многократно,
да и очевидность ее решения не вызывает сомнений:
C++
1
2
3
4
5
6
7
int pow(int x,int n)
{
   int s=1;
   for(int i=1;i<=n;i++)
        s*=x;
   return s;
}
1
Модератор
Эксперт по электронике
8965 / 6731 / 921
Регистрация: 14.02.2011
Сообщений: 23,767
18.10.2014, 10:25
Лучший ответ Сообщение было отмечено Andrew_Montana как решение

Решение

Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
for(int i=1;i<=n;i++)
        s*=x;
можно и
C++
1
2
for(int i=0;i<n;i++)
        s*=x;
ну и вдогонку, для расширения кругозора
C++
1
2
3
int s=1;
while(n--)
  s*=x;
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12901 / 6761 / 1816
Регистрация: 18.10.2014
Сообщений: 17,096
18.10.2014, 10:30
Лучший ответ Сообщение было отмечено ValeryS как решение

Решение

Лобовой алгоритм вам уже нарисовали.

Тем не менее более остроумным, известным и эффективным алгоритмом вычисления натуральной степени является алгоритм, основанный на следующем простом наблюдении.

Пусть вам надо вычислить ab. И пусть вы знаете разложение числа b на сумму степеней двойки. (Например число 11 равно 1 + 2 + 8). Тогда надо просто чиcло a возвести последовательно в эти степени двойки и перемножить результаты. Т.е., например, для вычисления a11 надо вычислить a1 * a2 * a8.

Разложение показателя степени b на сумму степеней двойки - это ни что иное как двоичная запись числа b, которая у нас есть сразу. А вычисление последоватeльных степеней a - это просто повторение оперaции a *= a.

Получаем компактный и эффективный алгоритм

C
1
2
3
4
5
6
7
8
9
10
unsigned long long int_pow(unsigned a, unsigned b)
{
  unsigned long long result = 1;
 
  for (unsigned long long pow_a = a; b != 0; b >>= 1, pow_a *= pow_a)
    if ((b & 1) != 0)
      result *= pow_a;
 
  return result;
}
Этот алгоритм делает только log b итераций, в отличие от b итераций в лобовом алгоритме.
3
Модератор
Эксперт по электронике
8965 / 6731 / 921
Регистрация: 14.02.2011
Сообщений: 23,767
18.10.2014, 10:42
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Этот алгоритм делает только log b итераций, в отличие от b итераций в лобовом алгоритме.
можно еще уменьшить количество итераций
например сдвигать сразу на 8 4 2 и 1
но код будет уж слишком запутанным
0
4 / 4 / 0
Регистрация: 09.10.2018
Сообщений: 6
26.11.2018, 13:43
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>
 
unsigned long long myPow (int base, int exp);
 
 
int main()
{
    std::cout << "Enter the base: ";
    int base;
    std::cin >> base;
 
    std::cout << "Enter the power for your base: ";
    int exp;
    std::cin >> exp;
    std::cout << base << " ^ " << exp << " = " << myPow (base, exp)<< "\n";
 
    return 0;
}
 
unsigned long long myPow (int base, int exp)
{
    unsigned long long result {1};
    while (exp)
    {
        if (exp & 1)
            result *= base;
        exp >>= 1;
        base *= base;
    }
 
    return result;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.11.2018, 13:43
Помогаю со студенческими работами здесь

Составьте программу вычисления степени числа, а с натуральным показателем n
Циклический оператор Составьте программу вычисления степени числа, а с натуральным показателем n. (Записать варианты...

Составьте программу вычисления степени числа а с натуральным показателем n
Ребят есть задание, нужно написать программу в делфи, а в нем я не разбираюсь, помогите пожалуйста, вообщем вот задание

Составьте программу вычисления степени числа, а с натуральным показателем n
Циклический оператор Составьте программу вычисления степени числа, а с натуральным показателем n. (Записать варианты программы...

Составьте программу вычисления степени натурального числа A с натуральным показателем n.
Составьте программу вычисления степени натурального числа A с натуральным показателем n.

Составить программу вычисления степени числа А с натуральным показателем N . (Записать варианты программы с 3 видами циклов: for, while, do…while)
Составить программу вычисления степени числа А с натуральным показателем N . (Записать варианты программы с 3 видами циклов: for, while,...


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

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

Новые блоги и статьи
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru