题解 | #数值的整数次方#

数值的整数次方

http://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00

  • 题目描述
    给定一个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,程序结束
全部评论

相关推荐

02-07 10:52
复旦大学 Java
混子不想混:非常能理解,感觉他们就靠着入行早,打压新人一样。我这个公司也是,天天干的累死累活,然后绩效打C,合着让新人被绩效,像是年底攒棺材本一样。总是打击之后,还会让人开始自我怀疑,是不是我努力的还不够,实际上并不是,就是他们不做人,故意打压新人。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务