剑指offer 12、数值的整数次方 python和c++

题目描述:

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

保证base和exponent不同时为0

思路1:直接循环乘exponent次的base

python 版

# -*- coding:utf-8 -*-
class Solution:
    def Power(self, base, exponent):
        if exponent == 1:
            return base
        if exponent == 0:
            return 1
        ans = 1
        for i in range(abs(exponent)):
            ans = ans * base
        if exponent>0:
            return ans
        else:
            return 1/ans
        # write code here

c++版

class Solution {
public:
    double Power(double base, int exponent) {
        if (exponent == 1)
            return base;
        if (exponent == 0)
            return 1;
        double ans = 1.0;
        int e = exponent>0?exponent:-exponent;
        for(int i = 0; i<e; ++i){
            ans = ans * base;
        }
        if (exponent>0)
            return ans;
        else
            return 1/ans;
    
    }
};

思路2:快速幂,

python 版

# -*- coding:utf-8 -*-
class Solution:
    def Power(self, base, exponent):
        if base == 0:
            return 0
        if exponent == 0:
            return 1
        e = abs(exponent)
        tmp, res = base, 1
        while(e > 0):
            #如果最后一位为1,那么给res乘上这一位的结果
            if (e & 1 == 1):   # e & 1 等价于 (e % 2) == 1 
                res =res * tmp
            e = e >> 1
            tmp = tmp * tmp
        return res if exponent > 0 else 1/res

c++版

class Solution {
public:
    double Power(double base, int exponent) {
        if (exponent == 1)
            return base;
        if (exponent == 0)
            return 1;
        //int e = exponent>0?exponent:-exponent;
        int e = abs(exponent);
        double tmp = base, ans = 1;
        while(e > 0){
            //如果最后一位为1,那么给res乘上这一位的结果
            if (e&1 == 1)   //e & 1 等价于 (e % 2) == 1 
                ans =ans * tmp;
            e = e >> 1;
            tmp = tmp * tmp;
        }
        if(exponent>0)
            return ans;
        else
            return 1/ans;
    }
};
posted on 2021-06-10 17:28  雾恋过往  阅读(40)  评论(0编辑  收藏  举报

Live2D