数值的整数次方

题目描述

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

题目分析:对于求一个数的幂,我们可以这样转化。例如求10^3,我们可以将3化为二进制0011,所以10^3=10^0011=10^0001 * 10^0010=10^1 * 10^2=10*100=1000。所以我们只需要将指数的二进制逐位取出与底数相乘即可,然后底数要翻倍。
具体代码

class Solution {
public:
    double Power(double base, int exponent) {
        long long p = abs((long long)exponent);
        unsigned int n = 1;
        double r = 1.0;
        while(p)
        {
            if(p & n)//如果当前位为1
            {
                r *= base;
            }
            base = base * base;
            p >>= 1;
        }
        
        return exponent > 0 ? r : 1/r;
    }
};
发布了99 篇原创文章 · 获赞 30 · 访问量 5392
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览