栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数值的整数次方(C++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数值的整数次方(C++)

数值的整数次方 描述

实现函数 double Power(double base, int exponent),求base的exponent次方。

注意:

  1. 保证base和exponent不同时为0。
  2. 不得使用库函数,同时不需要考虑大数问题
  3. 有特殊判题,不用考虑小数点后面0的位数。

数据范围:∣base∣≤100 ,∣exponent∣≤100 ,保证最终结果一定满足∣val∣≤104
进阶:空间复杂度 O(1),时间复杂度 O(n)

示例1
输入:
2.00000,3
返回值:
8.00000
示例2
输入:
2.10000,3
返回值:
9.26100
示例3
输入:
2.00000,-2
返回值:
0.25000
说明:
2的-2次方等于1/4=0.25
思路/解法 方式一

次方根如果是偶数,对其进行出2,直至等于1,比如8次方根,那么就是8/2 = 4/2 = 2/2 = 1,这个过程总共有3次,比如3^8,原本需要进行8次乘法,而我们记录了3次,此时我们只需要进行3次乘法即可,即(((3*3)*9)*81),因为3*3我们已经算出等于9了,以此类推即可。如果是奇数,我们先对其进行减1操作,其它步骤与偶数相同。

class Solution {
public:
    double Power(double base, int exponent) {
        bool isFu = false;//判断是否为负数次方根
        if(exponent < 0)
        {
            exponent *= (-1);
            isFu = true;
        }
        bool isStrange = false;//判断是否为奇数
        if(exponent % 2 != 0)
        {
            isStrange = true;
            exponent -= 1;
        }
        int count = 0;//记录除2次数
        while(exponent != 0 && exponent % 2 == 0)
        {
            count++;
            exponent /= 2;
        }
        
        double res = 1;//记录结果
        //该情况exponent一开始为奇数,比如7,那么7-1 = 6,6/2 = 3,即不管如何都应该进行3次暴力乘法
        for(int i = 0;i 
方式二 

暴力线性求次方根。

class Solution {
public:
    double Power(double base, int exponent) {
        bool isFu = false;
        if(exponent < 0)
        {
            exponent *= (-1);
            isFu = true;
        }
        double res = 1;
        for(int i = 0;i
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942759.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号