人生得意须尽欢,莫使金樽空对月。数值的整数次方

本文详细解析了计算数值的整数次方的三种方法:使用C库函数pow,暴力法直接计算以及更高效的二分法。通过具体代码示例,展示了不同方法的实现细节和运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接: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;
    }
};

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值