《学堂在线》清华郑莉老师的《Java程序设计 2025春》习题和程序设计题记录

ch1  Java语言基础知识编程题

编程题目1,描述 Pow函数  难度1/5级

实现x的n次方,x为类型为double,n的类型为int. 给定输入为x n, 输出x的n次方结果。

输入描述  
输出描述   
示例1:
输入:0.2 5
输出:0.00032
限制   时间:1000ms  空间:512MB
/*给讯飞星火提示词:帮我用Java写一个最优化的 double pow( double x, int n) 函数。
讯飞星火给出了如下程序实现, 该实现采用了快速幂算法(Exponentiation by Squaring),时间复杂度为 O(log n),并且处理了负指数的情况。
这种程序写法或许不应在Java程序设计这样的入门课中标注难度为1/5。不过作为清华的课程,或许可以理解。
*/

import java.util.Scanner;

class Main {
  public static double pow(double x, int n) {
    if (x == 0.0) {
      return (n == 0) ? 1.0 : 0.0;
    }
    if (n == 0) {
      return 1.0;
    }
    if (n < 0) {
      x = 1.0 / x;
      n = -n;
    }
    double result = 1.0;
    double base = x;
    while (n > 0) {
      if ((n & 1) == 1) { // 如果 n 是奇数
        result *= base;
      }
      base *= base; // 平方基数
      n >>= 1; // 右移一位,相当于 n /= 2
    }
    return result; 
  }
  
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    double x = in.nextDouble();
    int n = in.nextInt();
    System.out.print(pow(x, n));
    in.close();
  }
}

 

posted @ 2025-05-29 17:01  blues667  阅读(20)  评论(0)    收藏  举报