我如何将数字提高到幂?
2^1
2^2
2^3
等等...
我如何将数字提高到幂?
2^1
2^2
2^3
等等...
Answers:
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,因为它不知道的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
@AshishAhuja中的“ 1”进行注释的人,是因为该系列 1 << 0 = 1
从此开始2^0 = 1
; 1 << 1 = 2
从此2^1 = 2
; 1 << 2 = 4
从此2^2 = 4
等等……
#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);
}
请注意,使用https的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是exp
在cmath,tgmath或math.h库中使用pow()函数。
#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;
}
请注意,如果您以长整型以外的任何数据类型来输入功率,则答案将提升为双精度。也就是说,它将接受输入,并将输出加倍。对于long 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库或字符串。
__
是保留的,您可能应该选择其他名称。