题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0

快速幂讲解:https://www.cnblogs.com/CXCXCXC/p/4641812.html

一、代码

快速幂

  1. // 递推写法
  2. public class Solution {
  3. public static double Power(double base, int exp) {
  4. boolean flag = false;
  5. if (exp < 0) {
  6. flag = true;
  7. exp = -exp;
  8. }
  9. double ans = 1;
  10. while (exp > 0) {
  11. if ((exp & 1) == 1) {
  12. ans = ans * base;
  13. }
  14. exp >>= 1;
  15. base *= base;
  16. }
  17. return flag ? 1 / ans : ans;
  18. }
  19. }
  20. // 递归写法(没看懂)
  21. public class Solution {
  22. public static double Power(double base, int exp) {
  23. boolean flag = exp < 0;
  24. if (flag) {
  25. exp = -exp;
  26. }
  27. double result = getPower(base, exp);
  28. return flag ? 1 / result : result;
  29. }
  30. public static double getPower(double base, int exp) {
  31. if (exp == 0) {
  32. return 1;
  33. }
  34. if (exp == 1) {
  35. return base;
  36. }
  37. double ans = getPower(base, exp >> 1);
  38. ans *= ans;
  39. if ((exp & 1) == 1) {
  40. ans *= base;
  41. }
  42. return ans;
  43. }

二、代码

暴力累乘

  1. public class Solution {
  2. public double Power(double base, int exponent) {
  3. if (base == 0.0){
  4. return 0.0;
  5. }
  6. // 前置结果设为1.0,即当exponent=0 的时候,就是这个结果
  7. double result = 1.0d;
  8. // 获取指数的绝对值
  9. int e = exponent > 0 ? exponent : -exponent;
  10. // 根据指数大小,循环累乘
  11. for(int i = 1 ; i <= e; i ++){
  12. result *= base;
  13. }
  14. // 根据指数正负,返回结果
  15. return exponent > 0 ? result : 1 / result;
  16. }
  17. }