Làm thế nào để tôi nâng một con số lên một sức mạnh?
2^1
2^2
2^3
Vân vân...
Làm thế nào để tôi nâng một con số lên một sức mạnh?
2^1
2^2
2^3
Vân vân...
Câu trả lời:
pow () trong thư viện cmath. Thêm thông tin ở đây . Đừng quên đặt #include<cmath>
ở đầu tập tin.
std::pow
trong <cmath>
tiêu đề có những quá tải này:
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);
Bây giờ bạn không thể làm
pow(2, N)
với N là một int, bởi vì nó không biết được của float
, double
hoặc long double
phiên bản nó sẽ mất, và bạn sẽ nhận được một lỗi mơ hồ. Cả ba đều cần chuyển đổi từ int sang dấu phẩy động và cả ba đều tốn kém như nhau!
Do đó, hãy chắc chắn có đối số đầu tiên được gõ để nó khớp với một trong ba đối số đó một cách hoàn hảo. Tôi thường sử dụngdouble
pow(2.0, N)
Một số luật sư tào lao từ tôi một lần nữa. Bản thân tôi thường rơi vào cạm bẫy này, vì vậy tôi sẽ cảnh báo bạn về điều đó.
int N; pow(2.0, N)
vẫn sẽ mơ hồ :: could be 'pow(double,int)' or 'pow(double,double)'
- / → diễn viên
std::pow(2.0, 3)
.
pow(2, N)
không rõ ràng kể từ C ++ 11, bởi vì có một hàm mẫu nhận bất kỳ loại số học nào làm tham số.
Trong C ++, toán tử "^" là bit OR. Nó không hoạt động để nâng lên một sức mạnh. X << n là một dịch chuyển trái của số nhị phân giống như nhân x với 2 n số lần và chỉ có thể được sử dụng khi tăng 2 lên công suất. Hàm POW là một hàm toán học sẽ hoạt động tổng quát.
1 << n
cũng giống như nâng 2 lên lũy thừa n, hoặc 2^n
.
1 << n
bình luận @AshishAhuja, đó là vì loạt phim như thế này 1 << 0 = 1
kể từ đó 2^0 = 1
; 1 << 1 = 2
kể từ đó 2^1 = 2
; 1 << 2 = 4
kể từ đó 2^2 = 4
và như vậy ...
Sử dụng hàm pow (x, y): Xem tại đây
Chỉ cần bao gồm math.h và bạn đã hoàn tất.
Mặc dù pow( base, exp )
là một gợi ý tuyệt vời, hãy lưu ý rằng nó thường hoạt động ở điểm nổi.
Điều này có thể hoặc không thể là những gì bạn muốn: trên một số hệ thống, một vòng lặp đơn giản nhân trên bộ tích lũy sẽ nhanh hơn cho các kiểu số nguyên.
Và đối với hình vuông cụ thể, bạn cũng có thể tự nhân các số với nhau, dấu phẩy động hoặc số nguyên; nó không thực sự làm giảm khả năng đọc (IMHO) và bạn tránh được chi phí hiệu năng của một cuộc gọi chức năng.
Tôi không đủ danh tiếng để bình luận, nhưng nếu bạn thích làm việc với QT, họ có phiên bản riêng.
#include <QtCore/qmath.h>
qPow(x, y); // returns x raised to the y power.
Hoặc nếu bạn không sử dụng QT, cmath về cơ bản cũng có điều tương tự.
#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);
}
// định nghĩa của hàm growToPower
double raiseToPow(double x, int power)
{
double result;
int i;
result =1.0;
for (i=1, i<=power;i++)
{
result = result*x;
}
return(result);
}
nếu bạn chỉ muốn giao dịch với base_2 thì tôi khuyên bạn nên sử dụng toán tử shift trái << thay vì thư viện toán học .
mã mẫu:
int exp = 16;
for(int base_2 = 1; base_2 < (1 << exp); (base_2 <<= 1)){
std::cout << base_2 << std::endl;
}
đầu ra mẫu:
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768
Nhiều câu trả lời đã đề xuất pow()
hoặc thay thế tương tự hoặc thực hiện riêng của họ. Tuy nhiên, với các ví dụ ( 2^1
, 2^2
và 2^3
) trong câu hỏi của bạn, tôi sẽ đoán cho dù bạn chỉ cần tăng 2
đến một sức mạnh số nguyên. Nếu đây là trường hợp, tôi sẽ đề nghị bạn sử dụng 1 << n
cho 2^n
.
Lưu ý rằng việc sử dụng pow(x,y)
ít hiệu quả hơn x*x*x
y lần như được hiển thị và trả lời tại đây https://stackoverflow.com/a/2940800/319728 .
Vì vậy, nếu bạn đang sử dụng hiệu quả x*x*x
.
Tôi đang sử dụng thư viện cmath
hoặc math.h
để sử dụng các pow()
chức năng của thư viện chăm sóc quyền hạn
#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;
}
Đầu tiên thêm #include <cmath>
sau đó bạn có thể sử dụng pow
methode trong mã của bạn chẳng hạn:
pow(3.5, 3);
Mà 3,5 là cơ sở và 3 là exp
sử dụng hàm pow () trong thư viện cmath, tgmath hoặc 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;
}
xin lưu ý rằng nếu bạn cung cấp năng lượng đầu vào như bất kỳ loại dữ liệu nào ngoài dài gấp đôi thì câu trả lời sẽ được tăng lên gấp đôi. đó là nó sẽ lấy đầu vào và cho đầu ra là gấp đôi. đối với đầu vào kép dài, kiểu trả về dài gấp đôi. để thay đổi câu trả lời cho int use, int c = (int) pow (a, b)
Nhưng, hãy nhớ rằng một số con số này có thể dẫn đến một số ít hơn câu trả lời đúng. vì vậy, ví dụ bạn phải tính 5 ^ 2, thì câu trả lời có thể được trả về là 24.99999999999 trên một số trình biên dịch. khi thay đổi kiểu dữ liệu thành int, câu trả lời sẽ là 24 thay vì 25 câu trả lời đúng. Vì vậy, làm điều này
int c=(int)(pow(a,b)+0.5)
Bây giờ, câu trả lời của bạn sẽ chính xác. Ngoài ra, đối với số lượng rất lớn, dữ liệu bị mất khi thay đổi kiểu dữ liệu gấp đôi thành dài dài int. ví dụ bạn viết
long long int c=(long long int)(pow(a,b)+0.5);
và đưa ra đầu vào a = 3 và b = 38 thì kết quả sẽ là 1350851717672992000 trong khi câu trả lời đúng là 1350851717672992089, điều này xảy ra vì hàm pow () trả về 1.35085e + 18 được thăng cấp thành int là 1350851717672992000. chức năng quyền lực tùy chỉnh cho các tình huống như vậy, như: -
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;
}
và sau đó gọi nó bất cứ khi nào bạn muốn,
int main()
{
long long int a,b;
cin >> a >> b;
long long int c=__pow(a,b);
cout << c << endl;
return 0;
}
Đối với các số lớn hơn phạm vi int dài dài, hãy sử dụng thư viện boost hoặc chuỗi.
__
được bảo lưu, có lẽ bạn nên chọn một cái gì đó khác.