码迷,mamicode.com
首页 > 其他好文 > 详细

【剑指offer】16、数值的整数次方

时间:2018-07-19 23:25:24      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:库函数   分享   ret   col   技术   signed   问题   情况   ima   

题目

实现double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同样需要考虑大数问题

思路

题目意思很清楚,需要考虑情况周全。

1、若base=0,exp <= 0

2、若exp >= 0 , 直接return计算后的数值

  若exp <= 0 ,return 计算后数值的倒数

注意定义是double,因此写代码时要写成0.0,1.0

class Solution {
public:
     
    double Power(double base, int exponent) {
        if(base == 0.0 && exponent < 0) return 0.0;
         
        if (exponent >= 0){
            return PowerWithUnsignedExponent(base, exponent);
        }
        else{
            return (1.0 / PowerWithUnsignedExponent(base, -exponent));
        }
    }
     
    double PowerWithUnsignedExponent(double base, unsigned int exponent){
        if (exponent == 0) return 1.0;
        if (exponent == 1) return base;
         
        double result = PowerWithUnsignedExponent(base, exponent>>1);
        result *= result;
        if (exponent & 1) //判断指数是否为奇数
        {
            result *= base;
        }
        return result;
    }
};

改进

计算幂时可以用快速幂,思想如下:

技术分享图片

 

class Solution {
public:
  double Power(double base, int exponent) {
    if(base == 0.0 && exponent < 0)
      return 0.0;     if (exponent >= 0){       return PowerWithUnsignedExponent(base, exponent);     }     else{       return (1.0 / PowerWithUnsignedExponent(base, -exponent));     }   }   double PowerWithUnsignedExponent(double base, unsigned int exponent){     if (exponent == 0)
      return 1.0;     if (exponent == 1)
      return base;
    return (PowerWithUnsignedExponent(base, exponent>>1) * PowerWithUnsignedExponent(base, exponent>>1) * PowerWithUnsignedExponent(base, exponent%2)); } };

 

【剑指offer】16、数值的整数次方

标签:库函数   分享   ret   col   技术   signed   问题   情况   ima   

原文地址:https://www.cnblogs.com/shiganquan/p/9338962.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!