zoukankan      html  css  js  c++  java
  • 【剑指Offer-代码的完整性】面试题16:数值的整数次方

    题目描述

    给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0,同时不需要考虑大数问题(不会溢出)。

    思路1

    因为不会溢出,可以直接使用循环相乘来求解。当指数(exponent)为整数时,直接返回结果;当指数为负数时,先将指数转为正数求解后,返回倒数,因为(a^{-b}=frac{1}{a^b})。代码如下:

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

    思路2

    因为

    所以可以用递归来求解。代码如下:

    class Solution {
    public:
        double Power(double base, int exponent) {
            if(exponent==0)
                return 1;
            if(base==0.0) // base==0也行
                return 0;
            
            int absExp = exponent<0? -exponent:exponent;
            double ans = PowerWithAbsExp(base, absExp);
            
            if(exponent<0)
                return 1/ans;
            else return ans;
        }
        
        double PowerWithAbsExp(double base, int exponent){
            if(exponent==0)
                return 1;
            if(exponent==1)
                return base;
            
            double ans = PowerWithAbsExp(base, exponent/2);
            ans *= ans;
            if(exponent%2==1)
                ans *= base;
            return ans;
        }
    };
    

    在上面的代码中,可以用右移一位(exponent>>1)代替exponent/2,可以用exponent&1代替exponent%2==1。

  • 相关阅读:
    Android json操作之取得一个对象
    Uubntu E: Sub-process /usr/bin/dpkg returned an error code问题的解决办法
    转 Android
    Android 将从网络获取的数据缓存到私有文件
    Android 每隔3s更新一次title
    Android UI主线程与子线程
    Android 解析JSON数组
    MySql中的内外联结查询
    MySQL执行外部sql脚本
    Ubuntu 下启动/停止/重启mysql服务
  • 原文地址:https://www.cnblogs.com/flix/p/12438831.html
Copyright © 2011-2022 走看看