Як підняти число до потужності?
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)'
- / → кидок
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
коментарі @AshishAhuja, це тому, що серія виходить так, як 1 << 0 = 1
з тих пір 2^0 = 1
; 1 << 1 = 2
з тих пір 2^1 = 2
; 1 << 2 = 4
відтоді 2^2 = 4
і так далі ...
Використовуйте функцію pow (x, y): Дивіться тут
Просто включіть math.h і все готово.
Хоча pow( base, exp )
це чудова пропозиція, майте на увазі, що він зазвичай працює з плаваючою комою.
Це може бути або не бути тим, що ви хочете: у деяких системах простий цикл, що множиться на акумуляторі, буде швидшим для цілих типів.
А конкретно для квадрата, ви можете просто просто помножити числа разом, плаваюча точка чи ціле число; це насправді не зменшення читабельності (IMHO), і ви уникаєте накладних витрат виклику функції.
У мене недостатньо репутації для коментарів, але якщо вам подобається працювати з 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);
}
// визначення функції підвищенняToPower
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
methode у своєму коді, наприклад:
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;
}
зауважте, що якщо ви вводите потужність як будь-який тип даних, окрім довгого подвійного, відповідь буде перенесена на відповідь подвійного. тобто це буде брати вклад і давати вихід як подвійний. для довгих подвійних входів тип повернення довгий подвійний. для зміни відповіді на використання int, int c = (int) pow (a, b)
Але майте на увазі, що для деяких цифр це може призвести до меншої кількості, ніж правильна відповідь. так, наприклад, вам доведеться обчислити 5 ^ 2, тоді відповідь можна повернути як 24.99999999999 на деяких компіляторах. на зміну типу даних на int відповідь буде 24, а не 25 правильна відповідь. Отже, зробіть це
int c=(int)(pow(a,b)+0.5)
Тепер ваша відповідь буде правильною. Крім того, для дуже великої кількості дані втрачаються при зміні типу даних подвійний на довгий довгий 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;
}
Для чисел, що перевищують діапазон довгих довгих int, використовуйте або збільшити бібліотеку, або рядки.
__
, зарезервовані, ви, ймовірно, повинні вибрати щось інше.