Как мне возвести число в степень?
2^1
2^2
2^3
и т.д...
Как мне возвести число в степень?
2^1
2^2
2^3
и т.д...
Ответы:
pow () в библиотеке cmath. Больше информации здесь . Не забудьте поставить #include<cmath>
вверху файла.
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 будучи ИНТ, потому что он не знает , какой из float
, double
или long double
версии он должен принять, и вы получите ошибку неоднозначности. Для всех трех потребуется преобразование из int в число с плавающей запятой, и все три одинаково дороги!
Поэтому убедитесь, что первый аргумент введен так, чтобы он идеально соответствовал одному из этих трех. Я обычно используюdouble
pow(2.0, N)
Снова какая-то адвокатская хрень. Я сам часто попадал в эту ловушку, поэтому хочу вас об этом предупредить.
int N; pow(2.0, N)
все равно будет двусмысленно:: could be 'pow(double,int)' or 'pow(double,double)'
- / → cast
std::pow(2.0, 3)
.
pow(2, N)
однозначно, начиная с C ++ 11, потому что есть функция-шаблон, принимающая любой арифметический тип в качестве параметров.
В C ++ оператор «^» - это побитовое ИЛИ. Не работает для возведения в степень. X << n - это сдвиг двоичного числа влево, который совпадает с умножением x на 2 n раз и может использоваться только при возведении 2 в степень. Функция POW - это математическая функция, которая работает в общем случае.
1 << n
это то же самое, что возведение 2 в степень n, или 2^n
.
1 << n
понял, почему "1" в комментарии @AshishAhuja, это потому, что 1 << 0 = 1
с тех пор серия идет следующим образом 2^0 = 1
; 1 << 1 = 2
поскольку 2^1 = 2
; 1 << 2 = 4
с тех пор 2^2 = 4
и так далее ...
Хотя pow( base, exp )
это отличное предложение, имейте в виду, что он обычно работает с плавающей запятой.
Это может быть, а может и не быть тем, что вам нужно: в некоторых системах простой цикл умножения на аккумулятор будет быстрее для целочисленных типов.
И, в частности, для квадрата, вы могли бы просто перемножить числа вместе, с плавающей запятой или целым числом; это не совсем снижение читабельности (ИМХО), и вы избегаете накладных расходов на производительность при вызове функции.
У меня недостаточно репутации, чтобы комментировать, но если вам нравится работать с 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
#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);
}
если вы хотите иметь дело только с base_2, я рекомендую использовать оператор сдвига влево << вместо математической библиотеки .
образец кода :
int exp = 16;
for(int base_2 = 1; base_2 < (1 << exp); (base_2 <<= 1)){
std::cout << base_2 << std::endl;
}
образец вывода:
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768
Во многих ответах предлагались pow()
или аналогичные альтернативы или их собственные реализации. Однако, учитывая примеры ( 2^1
, 2^2
и 2^3
) в вашем вопросе, я бы предположил, нужно ли вам только возвести 2
в целую степень. Если это так, я бы посоветовал вам использовать 1 << n
для 2^n
.
Обратите внимание, что использование pow(x,y)
менее эффективно, чем x*x*x
y раз, как показано и ответили здесь https://stackoverflow.com/a/2940800/319728 .
Так что если вы собираетесь использовать эффективность x*x*x
.
Я использую библиотеку 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;
}
Сначала добавьте, #include <cmath>
затем вы можете использовать pow
метод в своем коде, например:
pow(3.5, 3);
Какие 3,5 - базовые, а 3 - опытные
используйте функцию pow () в библиотеке cmath, tgmath или math.h.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a,b;
cin >> a >> b;
cout << pow(a,b) << endl; // this calculates a^b
return 0;
}
обратите внимание, что если вы вводите power как любой тип данных, кроме long double, то ответ будет повышен до типа double. то есть он будет принимать входные данные и выдавать двойные выходные данные. для длинных двойных входов тип возвращаемого значения - long double. для изменения ответа на использование int int c = (int) pow (a, b)
Но помните, что для некоторых чисел это может привести к получению числа меньше правильного. так, например, вам нужно вычислить 5 ^ 2, тогда ответ может быть возвращен как 24.99999999999 на некоторых компиляторах. при изменении типа данных на int ответ будет 24, а не 25 правильным ответом. Итак, сделай это
int c=(int)(pow(a,b)+0.5)
Теперь ваш ответ будет правильным. кроме того, для очень больших чисел данные теряются при изменении типа данных double на long long int. например вы пишете
long long int c=(long long int)(pow(a,b)+0.5);
и введите a = 3 и b = 38, тогда результат будет 1350851717672992000, а правильный ответ - 1350851717672992089, это происходит потому, что функция pow () возвращает 1.35085e + 18, которая повышается до int как 1350851717672992000. Я предлагаю написать настраиваемая функция мощности для таких сценариев, например: -
long long int __pow (long long int a, long long int b)
{
long long int q=1;
for (long long int i=0;i<=b-1;i++)
{
q=q*a;
}
return q;
}
а затем вызывая его, когда захотите,
int main()
{
long long int a,b;
cin >> a >> b;
long long int c=__pow(a,b);
cout << c << endl;
return 0;
}
Для чисел, превышающих диапазон long long int, используйте либо библиотеку boost, либо строки.
__
, зарезервированы, вероятно, вам следует выбрать что-то другое.