【牛客】数值的整数次方

链接:https://www.nowcoder.com/questionTerminal/1a834e5e3e1a4b7ba251417554e07c00
来源:牛客网

[编程题]数值的整数次方.
热度指数:614061时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M

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

解题思路

一、利用库函数

#include< math.h >
 C 库函数 double pow(double x, double y) 返回 x 的 y 次幂,即 xy。

完整的代码

class Solution {
public:
    double Power(double base, int exponent) {
    return pow(base, exponent);
    }
};

结果
在这里插入图片描述

二、暴力法

直接进行计算,如果exponent为正数直接计算,如果为负数1 / 结果
完整代码如下

class Solution {
public:
    double Power(double base, int exponent) {
     
        // 前置结果设为1.0,即当exponent=0 的时候,就是这个结果
        double result = 1.0;
        // 获取指数的绝对值
        int e = exponent > 0 ? exponent : -exponent;
        // 根据指数大小,循环累乘
        for(int i = 1 ; i <= e; i ++){
            result *= base;
        }
        // 根据指数正负,返回结果
        return exponent > 0 ? result : 1 / result;
    }
};

结果图
在这里插入图片描述

三、二分法

1、exponent是正数。那么递归式如下:

如果exponent是偶数,Power(base, exponent) = Power(base, exponent / 2) * Power(base, exponent / 2)
如果exponent是奇数,Power(base, exponent) = base * Power(base, exponent / 2) * Power(base, exponent / 2)

2、负指数exponent的情况,取其绝对值先计算。将最后结果取倒数即可。
完整代码


class Solution {
public:
    double Power(double base, int exponent) {
        bool x = false;
        if(exponent < 0)
        {
            exponent = -exponent;
            x = true;
        }
        double result = GetPower(base, exponent);
        return x ? 1/result : result;
    }
    double GetPower(double base, int exponent)
    {
        if(exponent == 0)
        {
            return 1;
        }
        if(exponent == 1)
        {
            return base;
        }
        double ans = GetPower(base, exponent >>1);
        ans *= ans;
        if(exponent & 1 == 1)
        {
            ans *= base;
        }
        return ans;
    }
};

运行结果
在这里插入图片描述

发布了36 篇原创文章 · 获赞 118 · 访问量 7206

猜你喜欢

转载自blog.csdn.net/famur/article/details/105080343
今日推荐