这是一个受欢迎的采访问题。实现我自己的战俘功能。 网上有一些流行的递归方法,但我试图迭代地进行。该代码适用于n> 0,但是当它低于0时,我有点迷失。这是我的代码。
public double myPow(double x, int n) {
if(x == 0) return 0;
if(n == 0) return 1;
double result = 1;
if(n > 0 ){
for(int i=1; i <= n; i++){
result = result * x;
}
}else{
for(int i=1; i<= n; i++){
//calculate the nth root
}
}
return result;
}
计算第n个根时有任何帮助。
答案 0 :(得分:1)
我想你可以这样做:(因为x ^( - n)= 1 / x ^ n)
double positive_pow(double x, int n) {
if(x == 0) return 0;
if(n == 0) return 1;
double result = 1;
if(n > 0 ){
for(int i=1; i <= n; i++){
result = result * x;
}
}else{
for(int i=1; i<= n; i++){
//calculate the nth root
}
}
return result;
}
public double pow(double x, int n) {
if (n > 0) return positive_pow(x, n);
else if (n == 0) return 1;
else return 1 / positive_pow(x, 0-n);
}
这不是实现这一目标的最短方式,但它基于您的基本功能,并且比递归计算它或弄乱Math
函数更清晰。
答案 1 :(得分:0)
这会奏效。
此代码也将返回负面权力的结果。为了解释,我使用变量
int p= x
来计算负幂......
public static double Pow(int x,int n){
if(x == 0) return 0;
if(n == 0) return 1;
double result = 1;
if(n > 0 ){
for(int i=1; i <= n; i++){
result = result * x;
}
}
else{
int p=x;
for(int i=0; i>n; i--){
if(result==1){
result= 1/(result*x);
result++;
}
else{
p=p*x;
result= (1.0)*1/p;
}
}
}
return result;
}
答案 2 :(得分:-1)
试试这个,我在练习Java的时候写了这个。该想法是5 ^ 62 = 5 ^(32 + 16 + 8 + 4 + 2)= 5 ^ 32 * 5 ^ 16 * 5 ^ 8 * 5 ^ 4 * 5 ^ 2,并且在二进制代码中,62是00111110。
以下是代码:
double pow(double x, int n){
int i;
double result;
result = 1;
i = x;
while(n != 0){
if(n & 1 == 1){
result *= i;
}
i *= i;
n>>1;
}
return result;
}