算法题--计算乘方值

image.png

0. 链接

题目链接

1. 题目

Implement pow(x, n), which calculates x raised to the power n (xn).

Example 1:

Input: 2.00000, 10
Output: 1024.00000

Example 2:

Input: 2.10000, 3
Output: 9.26100

Example 3:

Input: 2.00000, -2
Output: 0.25000
Explanation: 2-2 = 1/22 = 1/4 = 0.25

Note:

  • -100.0 < x < 100.0
  • n is a 32-bit signed integer, within the range [−231, 231 − 1]

2. 思路1:先计算指数的二进制, 再累乘每个二进制位的乘方值

  • 首先, 如果按照固定循环来乘, 肯定复杂度太高, 直观上可以想到二进制
  • 可以利用乘方性质, 对指数进行二进制变换, 例如


    image.png

而又有


image.png

可以利用这个性质,
- 先计算13对应的二进制, 由低位到高位依次为[1, 0, 1, 1]
- 再依次计算每个二进制位对应的x的乘方值, 然后视该二进制位是否为1, 来决定是否将此乘方值乘到结果值上

  • 如果指数是负数, 则将上一步计算的结果取倒数

3. 代码

# coding:utf8

class Solution:
    def myPow(self, x: float, n: int) -> float:
        if x == 0:
            return 0

        sign = 1 if n == abs(n) else -1
        n = abs(n)

        rtn = 1
        value = x
        while n > 0:
            if n % 2 > 0:
                rtn *= value
            value *= value
            n >>= 1

        return rtn if sign == 1 else 1.0 / rtn


solution = Solution()
print(solution.myPow(2.00000, 10))
print(solution.myPow(2.10000, 3))
print(solution.myPow(2.00000, -2))

输出结果

1024.0
9.261000000000001
0.25

4. 结果

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 网站乱码问题我们会经常碰到,大多见于非英文的中文字符或其他字符乱码,而且,这类问题常常是因为编码方式问题,主要原因...
    波段顶底阅读 8,239评论 1 9
  • 运算符是处理数据的基本方法,用来从现有的值得到新的值。JavaScript 提供了多种运算符,本章逐一介绍这些运算...
    徵羽kid阅读 3,975评论 0 0
  • 一、进制 我们知道程序在计算机内部是以二进制的方式进行存储的,我们要想知道程序在计算机内部的存储,首先要明白二进制...
    码墨阅读 6,727评论 0 3
  • 定点小数运算 来自:http://www.eepw.com.cn/article/17893.htm 在DSP世界...
    郝宇峰阅读 13,128评论 0 2
  • 上塔罗课的第一天早上抽到的这些牌。第一眼看到宝剑2的时候不喜欢,蒙着双眼看不见,一个人孤零零守护着自己后面都是水没...
    宋佳Sabrina阅读 2,755评论 0 1