• 题目描述
    给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

保证base和exponent不同时为0。不得使用库函数,同时不需要考虑大数问题,也不用考虑小数点后面0的位数。

  • 思路
    一个数末尾为0时,右移一位相当于除以2,
    一个数末尾为1时,右移一位相当于-1,再除以2
    所以,当exponent&1=1时,需要将resbase,再令exponent右移1位,exponent右移1位的本质是base^exponent = base^(2exponent/2) = (base^2)^(exponent/2),因此,base=base^2。
  • 算法流程
    假设 base=3,exponent= 5。那么 5 的二进制是:101
  1. 结果值 result 初始为 1
  2. base 初始为 3,此时 exponent 的二进制最右位为 1,更新结果为:base * result
  3. exponent 右移一位。base 进行累乘,base 更新为 3 的 2 次方。由于 exponent 的二进制最右位为 0,不更新结果
  4. exponent 右移一位。base 进行累乘,base 更新为 3 的 4 次方。此时 exponent 的二进制最右位为 1,更新结果为:base * result,再右移,exponent则为0,程序结束