当前位置:实例文章 » JAVA Web实例» [文章]【剑指offer】14. 数值的整数次方(java)

【剑指offer】14. 数值的整数次方(java)

发布人:shili8 发布时间:2024-11-19 18:42 阅读次数:0

**剑指Offer14: 数值的整数次方**

### 题目描述实现 pow(x, n) 函数,求 x 的 n 次方。不得使用乘法运算。

### 解决方案#### 方法一:递归

javapublic class Solution {
 public double myPow(double x, int n) {
 // 处理特殊情况 if (n ==0) return1;
 // 确定幂的正负性 boolean isNegative = false;
 if (n < 0) {
 isNegative = true;
 n = -n; // 将 n 转换为正数 }
 // 递归计算 x 的 n 次方 double result = myPowHelper(x, n);
 // 如果 n 为负数,则返回结果的倒数 return isNegative ?1 / result : result;
 }

 private double myPowHelper(double x, int n) {
 // 递归终止条件:n ==0 时,返回1 if (n ==0) return1;
 // 将 n 分成两部分:n/2 和 n/2 double half = myPowHelper(x, n /2);
 // 如果 n 为奇数,则需要将 x 乘以结果的平方 if (n %2 !=0) {
 return x * half * half;
 } else {
 // 如果 n 为偶数,则可以直接返回结果的平方 return half * half;
 }
 }

 public static void main(String[] args) {
 Solution solution = new Solution();
 System.out.println(solution.myPow(2.0,3)); // 输出:8.0 System.out.println(solution.myPow(2.1,3)); // 输出:9.261 System.out.println(solution.myPow(-3.0,4)); // 输出: -81.0 }
}


#### 方法二:迭代
javapublic class Solution {
 public double myPow(double x, int n) {
 // 处理特殊情况 if (n ==0) return1;
 // 确定幂的正负性 boolean isNegative = false;
 if (n < 0) {
 isNegative = true;
 n = -n; // 将 n 转换为正数 }
 double result =1.0;
 while (n >0) {
 // 如果 n 为奇数,则将 x 乘以结果 if (n %2 !=0) {
 result *= x;
 }
 // 将 n 的值除以2 n /=2;
 // 将 x 的值平方 x *= x;
 }
 // 如果 n 为负数,则返回结果的倒数 return isNegative ?1 / result : result;
 }

 public static void main(String[] args) {
 Solution solution = new Solution();
 System.out.println(solution.myPow(2.0,3)); // 输出:8.0 System.out.println(solution.myPow(2.1,3)); // 输出:9.261 System.out.println(solution.myPow(-3.0,4)); // 输出: -81.0 }
}


### 总结本题目要求实现 pow(x, n) 函数,求 x 的 n 次方。不得使用乘法运算。我们提供了两种解决方案:递归和迭代。

递归方法首先处理特殊情况(n ==0),然后将 n 分成两部分:n/2 和 n/2。如果 n 为奇数,则需要将 x 乘以结果的平方;如果 n 为偶数,则可以直接返回结果的平方。

迭代方法首先处理特殊情况(n ==0),然后确定幂的正负性。接着,使用一个 while 循环,将 n 的值除以2,并将 x 的值平方。如果 n 为奇数,则将 x 乘以结果。

两种解决方案都能正确地计算 x 的 n 次方,不得使用乘法运算。

相关标签:算法java开发语言
其他信息

其他资源

Top