2009-05-10 1 views
66

Как поднять число до мощности?Что такое функция C++ для подведения числа к мощности?

2^1 

2^2 

2^3 

и т.д ...

+0

название было ввести в заблуждение. Речь идет о силах в целом, а не о квадрате. Я его отредактировал и исправил. – Zifre

+20

Если речь идет о полномочиях 2 в целом, используйте <<. –

+1

Да, это будет работать для * целых чисел *. , , – imallett

ответ

93

пау() в библиотеке CMATH. Больше информации here. Не забудьте указать #include в верхней части.

+4

ад, да .. это действительно так просто. –

13

Используйте Pow (х, у) функция: See Here

Просто включите math.h и вы все сделали.

3

Это пау или powf в <math.h>

Там нет специального оператора инфикс как в Visual Basic или Python

+1

powf() - это функция C99, которая не находится на C++. – newacct

3
pow(2.0,1.0) 
pow(2.0,2.0) 
pow(2.0,3.0) 

Ваш оригинальный вопрос название вводит в заблуждение. Чтобы просто площадь, используйте 2*2.

10

Вы должны иметь возможность использовать обычные методы С в математике.

#include <cmath>

pow(2,3)

если вы на Unix-подобных системах, man cmath

Это то, что вы спрашиваете?

Sujal

9

Хотя pow(base, exp) является большое предложение, имейте в виду, что, как правило, работает в плавающей точкой.

Это может быть или не быть тем, чего вы хотите: на некоторых системах простой цикл, умножающийся на аккумулятор, будет быстрее для целых типов.

И, в частности, для квадратов вы можете просто умножить числа вместе самостоятельно, с плавающей точкой или целое число; это действительно не снижение читаемости (IMHO), и вы избегаете накладных расходов на функционирование вызова функции.

+0

И да, это может попасть в категорию «преждевременной оптимизации», но я всегда считаю, что хорошо знать такие вещи, особенно если вам нужно программировать в средах с ограниченными ресурсами. – leander

62

std::pow в заголовке <cmath> имеет следующие перегрузки:

pow(float, float); 
pow(float, int); 
pow(double, double); // taken over from C 
pow(double, int); 
pow(long double, long double); 
pow(long double, int); 

Теперь вы не можете просто сделать

pow(2, N) 

с N будучи ИНТ, потому что он не знает, какой из поплавка, двойную или длинную двойную версию, которую он должен принять, и вы получите ошибку двусмысленности. Для всех трех потребуется преобразование из int в плавающую точку, и все три одинаково дорогостоящие!

Для этого обязательно должен быть введен первый аргумент, чтобы он соответствовал одному из этих трех. Я обычно использую double

pow(2.0, N) 

Некоторые адвокат дерьмо от меня снова. Я часто попадал в эту ловушку, поэтому я собираюсь предупредить вас об этом.

+0

'int N; pow (2.0, N) 'все равно будет неоднозначным: ' может быть 'pow (double, int)' или 'pow (double, double)'::// cast – Marvin

+0

@marvin Я рекомендую прочитать мой ответ перед добавлением комментария. Я объяснил, что это не дает двусмысленности. –

+3

Я рекомендую прочитать мой комментарий перед добавлением комментария. ;-) Я объяснил, что это дает двусмысленность. (Компилятор VS2008) – Marvin

5
#include <iostream> 
#include <conio.h> 

using namespace std; 

double raiseToPow(double ,int) //raiseToPow variable of type double which takes arguments (double, int) 

void main() 
{ 
    double x; //initializing the variable x and i 
    int i; 
    cout<<"please enter the number"; 
    cin>>x; 
    cout<<"plese enter the integer power that you want this number raised to"; 
    cin>>i; 
    cout<<x<<"raise to power"<<i<<"is equal to"<<raiseToPow(x,i); 
} 

// определение функции raiseToPower

double raiseToPow(double x, int power) 
{ 
    double result; 
    int i; 
    result =1.0; 
    for (i=1, i<=power;i++) 
    { 
     result = result*x; 
    } 
    return(result); 
} 
+2

Ваш ответ должен содержать пояснение вашего кода и описание того, как он решает проблему. – AbcAeffchen

9

В C++ оператор "^" является побитовое ИЛИ. Он не работает для повышения мощности. X < < n - левый сдвиг двоичного числа, который совпадает с умножением x на 2 n раз и может использоваться только при повышении 2 до мощности. Функция POW является математической функцией, которая будет работать в целом.

6

У меня недостаточно репутации, чтобы комментировать, но если вам нравится работать с QT, у них есть своя версия.

#include <QtCore/qmath.h> 
    qPow(x, y); // returns x raised to the y power. 

Или, если вы не используете QT, cmath имеет в основном то же самое.

#include <cmath> 
    double x = 5, y = 7; //As an example, 5^7 = 78125 
    pow(x, y); //Should return this: 78125 
0
int power (int i, int ow) // works only for ow >= 1 
{ // but does not require <cmath> library!=) 
    if (ow > 1) 
    { 
     i = i * power (i, ow - 1); 
    } 
    return i; 
} 

cout << power(6,7); //you can enter variables here 
1

Обратите внимание, что использование мощно (х, у) является менее эффективным, чем х х х у раза, как показано и здесь ответ https://stackoverflow.com/a/2940800/319728.

Итак, если вы собираетесь использовать эффективность x x x.

0

Я использую библиотеку cmath или math.h для того, чтобы использовать pow() библиотеки функций, которые берет на себя полномочия

#include<iostream> 
#include<cmath> 

int main() 
{ 
    double number,power, result; 
    cout<<"\nEnter the number to raise to power: "; 
    cin>>number; 
    cout<<"\nEnter the power to raise to: "; 
    cin>>power; 

    result = pow(number,power); 

    cout<<"\n"<< number <<"^"<< power<<" = "<< result; 

    return 0; 
} 
+0

Этот ответ уже был представлен много лет назад, не так ли? –

+0

Но как работать без использования функции pow() вручную. – Sushant