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

Возведение числа в отрицательную степень (без функции pow)

18.02.2016, 15:54. Показов 33193. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте) Помогите, пожалуйста, нужно возвести число в степень, в положительную получилось, а вот как возвести в отрицательную, не понимаю. Спасибо за помощь) Да, без pow.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int x,n,c,z; 
 
cout « "input number: "; 
cin » x; 
c=x; 
cout « "input power: "; 
cin » n; 
 
for (int i = 1; i < n; i++) 
{ 
if (n>0) 
{ 
x=x*c; 
} 
else 
{ 
x=x*c; 
x=1/x; 
 
} 
 
} 
cout« "result: " « x « endl;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.02.2016, 15:54
Ответы с готовыми решениями:

Возведение числа в отрицательную степень
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;Rus&quot;); double a, b , pow(1),...

Возведение матрицы в степень с использованием функции pow
Дана задача: возвести матрицу, введенную с клавиатуры (необязательно квадратную) в степень, так же введенную с клавиатуры. После чего...

Возведение числа в отрицательную степень
Как возвести число в отрицательную степень?

26
 Аватар для _Valera_
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
18.02.2016, 15:57
Lanka1313, найти положительную, а потом поделить единицу на нее.
http://www.algebraclass.ru/otricatelnaya-stepen/

http://e-maxx.ru/algo/binary_pow
1
0 / 0 / 1
Регистрация: 18.02.2016
Сообщений: 15
18.02.2016, 16:03  [ТС]
Спасибо) Но Как его выкрутить? У меня получается если 3 ^-3 то или 1 или 3.... Нужен еще один цикл, или что? если можно, посмотреть код и подсказать)))
0
 Аватар для _Valera_
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
18.02.2016, 16:07
Цитата Сообщение от Lanka1313 Посмотреть сообщение
Нужен еще один цикл,
Цитата Сообщение от _Valera_ Посмотреть сообщение
http://e-maxx.ru/algo/binary_pow
то не верное решение.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
18.02.2016, 20:30
Lanka1313, вот:
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
#include <iostream>
 
double power(double base, int exp);
 
int main()
{
    std::cout << "Please enter a base: ";
    double base;
    std::cin >> base;
 
    std::cout << "\nPlease enter a power: ";
    int exp;
    std::cin >> exp;
 
    std::cout << "\nThe result is: " << power(base, exp);
 
    return 0;
}
 
double power(double base, int exp)
{
    double result = 1;
 
    int loop_ends;
    if (exp < 0)
        loop_ends = -1 * exp;
    else
        loop_ends = exp;
 
    for (int i = 0; i < loop_ends; ++i)
        result *= base;
 
    if (exp < 0)
        result = 1 / result;
 
    return result;
}
1
0 / 0 / 1
Регистрация: 18.02.2016
Сообщений: 15
18.02.2016, 23:37  [ТС]
Спасибо))) Сейчас буду разбираться)
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
19.02.2016, 06:57
Lanka1313, вообще, можно, конечно, более читаемым код сделать попробовать:
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
#include <iostream>
 
int abs(int num);
double power(double base, int exp);
 
int main()
{
    std::cout << "Please enter a base: ";
    double base;
    std::cin >> base;
 
    std::cout << "\nPlease enter a power: ";
    int exp;
    std::cin >> exp;
 
    std::cout << "\nThe result is: " << power(base, exp);
 
    return 0;
}
 
int abs(int num)
{
    return num < 0 ? -num : num;
}
 
double power(double base, int exp)
{
    double result = 1;
 
    int loop_ends = abs(exp);
 
    for (int i = 0; i < loop_ends; ++i)
        result *= base;
 
    return exp < 0 ? 1 / result : result;
}
0
Объявлятель переменных
 Аватар для SpBerkut
1225 / 411 / 321
Регистрация: 24.09.2011
Сообщений: 1,279
19.02.2016, 07:25
Нет, вы серьёзно?
C++
1
2
3
4
5
#include <cmath>
double mypower (double a, double n)
{
    return exp(log(a)*n); //=a^n. Естественно, a должно быть > 0
}
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
19.02.2016, 13:00
Цитата Сообщение от SpBerkut Посмотреть сообщение
Нет, вы серьёзно?
SpBerkut, вполне. Логично было предположить, что если нельзя pow() из заголовочного файла cmath, то и другие функции из cmath тоже нельзя, и препод хочет ребятишек такие вот штуки научить ручками делать.
0
Объявлятель переменных
 Аватар для SpBerkut
1225 / 411 / 321
Регистрация: 24.09.2011
Сообщений: 1,279
19.02.2016, 13:01
Цитата Сообщение от gru74ik Посмотреть сообщение
то и другие функции из cmath тоже нельзя
А вот об этом речи не было.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
19.02.2016, 13:04
Цитата Сообщение от SpBerkut Посмотреть сообщение
А вот об этом речи не было.
О деталях реализации тоже речи не было. Так что, я в своём праве. Как захотел, так и сделал. Если топикстартеру не подойдёт мой вариант, я рыдать не буду.
0
19.02.2016, 13:06

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
Так что, я в своём праве. Как захотел, так и сделал.
Да на здоровье. Можно подумать, я вас в чём-то упрекаю.

0
1 / 1 / 0
Регистрация: 22.01.2018
Сообщений: 176
06.05.2025, 22:21
А у меня почему-то при делении 1 на результат умножения получается что-то не то.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
07.05.2025, 00:12
Цитата Сообщение от Ната87Ната Посмотреть сообщение
А у меня почему-то при делении 1 на результат умножения получается что-то не то.
У вас результат, вероятно целого типа.
То есть целочисленное деление.
А 1/(любое целое больше 1) равно 0

Покажите ваш итоговый код.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
07.05.2025, 05:56
SpBerkut, для целого показателя лучше прямое умножение. Поскольку прямое умножение позволяет выполнять операцию и при отрицательном основании.
0
1 / 1 / 0
Регистрация: 22.01.2018
Сообщений: 176
07.05.2025, 09:16
Если бы так, я бы поняла. Но когда считается 2 в 3 получается 8, а хочешь отрицательную степень получить, поделив 1/8 и получаешь 0.5 это уже загадка. 1/9 получаем 3,333 всестоинужного числа.. Очень странно.
0
 Аватар для vlisp
1062 / 983 / 153
Регистрация: 10.08.2015
Сообщений: 5,336
07.05.2025, 09:18
очень плохо, когда людей уже на начальном этапе профессионально деформируют. Ведь когда есть стандартная функция, которая работает лучше, нужно использовать ее, а не изобретать велосипеды.
0
Злостный нарушитель
 Аватар для Verevkin
10252 / 5678 / 1262
Регистрация: 12.03.2015
Сообщений: 26,314
07.05.2025, 09:39
Цитата Сообщение от Ната87Ната Посмотреть сообщение
Если бы так, я бы поняла. Но когда считается 2 в 3 получается 8, а хочешь отрицательную степень получить, поделив 1/8 и получаешь 0.5 это уже загадка. 1/9 получаем 3,333 всестоинужного числа.. Очень странно.
Да ёмаё!
C++
1
2
3
4
5
6
7
8
// возведение в целую степень со знаком
double shit_pow(double base, int exponent)
{
  double p = 1.0;
  unsigned e = exponent > 0 ? exponent : -exponent;
  while (e--) p *= base;
  return exponent > 0 ? p : 1.0 / p;
}
2
 Аватар для andrey_f
883 / 536 / 228
Регистрация: 21.02.2011
Сообщений: 5,706
07.05.2025, 10:46
Цитата Сообщение от Ната87Ната Посмотреть сообщение
Если бы так, я бы поняла. Но когда считается 2 в 3 получается 8, а хочешь отрицательную степень получить, поделив 1/8 и получаешь 0.5 это уже загадка. 1/9 получаем 3,333 всестоинужного числа.. Очень странно.
вот так попробуйте
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
#include <iostream>
using namespace std;
 
int main() {
    double x, result;
    int n;
 
    cout << "input number: ";
    cin >> x;
 
    cout << "input power: ";
    cin >> n;
 
    if (n >= 0) {
        result = 1;
        for (int i = 0; i < n; i++) {
            result *= x; // возводим в положительную степень
        }
    } else {
        result = 1;
        for (int i = 0; i < -n; i++) {
            result *= x; // возводим в положительную степень
        }
        result = 1 / result; // делим 1 на результат, чтобы получить отрицательную степень
    }
 
    cout << "result: " << result << endl;
 
    return 0;
}
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
07.05.2025, 11:54
Цитата Сообщение от vlisp Посмотреть сообщение
очень плохо, когда людей уже на начальном этапе профессионально деформируют. Ведь когда есть стандартная функция, которая работает лучше, нужно использовать ее, а не изобретать велосипеды.
- не соглашусь. Нужно не просто использовать стандартные функции, а понимать, что и как они делают. ТС не понимает, что означает "возведение в степень". И это действительно плохо.

О велосипедах. Хороший программист не должен бояться "изобрести велосипед". Ибо тот, кто боится, никогда не изобретет ничего. А изобретатель велосипеда имеет шанс однажды изобрести кое-что посущественнее!

Ну и для ТС решение:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
double pow(double x, int p)
{
    if (p == 0) return 1.0;
    if (p >  0) return x*pow(x,p-1);
    if (p <  0) return pow(x,p+1)/x;
}
 
int main() 
{
    cout << pow(5,3) << endl;
    cout << pow(5,-3) << endl;
 
    return 0;
}
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.05.2025, 11:54
Помогаю со студенческими работами здесь

Возведение в нецелую степень без pow
Как возвести число в нецелую степень не используя функцию pow?

Возведение в степень без pow (нужны комментарии)
я как бы основы понимаю,а вот когда дошел до создания функции то не знал вообще как.с умножением суммированием понял быстро смысл. int...

Возведение вещественного числа в степень pow
Собственно вижу, что накосячил где то с типизацией, но где уже сломал голову искать. Код примерно такой (Х задаем 0.5): float y = 0,...

Возведение в степень pow
Не могу понять почему выдаёт ошибку &quot;while trying to match the argument list '(int, int)'&quot;. Если объявлять переменные через double, то...

Возведение в степень, pow
вычитал что возведение в степень - функция pow. #include &quot;stdafx.h&quot; #include &lt;math.h&gt; #include &lt;iostream&gt; using...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru