【剑指 Offer】 16.数值的整数次方

【题目】

实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。

示例 1:

输入:x = 2.00000, n = 10
输出:1024.00000

示例 2:

输入:x = 2.10000, n = 3
输出:9.26100

示例 3:

输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25

提示:

    -100.0 < x < 100.0
    -231 <= n <= 231-1
    -104 <= xn <= 104

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/shu-zhi-de-zheng-shu-ci-fang-lcof

 

【思想】

通过快速幂运算,比如59,我们就将其变成(524 x 5

如果幂次数是奇数,就像上面一样,将余数乘到后面

如果是偶数,就直接转换。

 

 

 然后可以将乘转换为位运算

转化为位运算:
    向下整除 n//2 等价于 右移一位 n>>1 ;
    取余数 n%2 等价于 判断二进制最右一位值 n&1 ;

【步骤】

1.底数x=0时,返回0

2.将结果res赋为1

3.如果幂数n小于0,将幂数n转为-n,将底数转为x=1/x

4.循环计算,当n=0结束

  4.1 n&1=1时,表示当前幂次是奇数,res乘当前x底数

  4.2 x=x2

  4.3 n//2即n>>=1

5.返回res

 

【代码】

 

复制代码
class Solution {
    public double myPow(double x, int n) {
        double res = 1.0;
        long b = n;
        if(x==0) return 0;

        if(b<0){
            x = 1/x;
            b = -b;
        }
        while(b>0){
            if((b&1)==1){
                res *=x;
            }
            x*=x;
            b>>=1;
        }
        return res;
    }
}
复制代码

 

 
posted @   梦想是能睡八小时的猪  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示