• 《剑指offer》 数值的整数次方


    本题来自《剑指offer》 数值的整数次方

    题目:

      给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

    思路:

      代码从三个方面处理错误的代码,返回值,全局代码和异常。

      我们考虑exponent是{负数,0,正数}和base有可能的取值{自然数,0}

      首先考虑边界:如果base是0,则取值没有意义。exponent是0,则返回值为1。

      如果exponent是负数,则返回其倒数即可。

      如果exponent是正数,则直接返回。  

      处理函数可以采用循环的方式,为O(n),如果采用递归的方式为log(n)。

    C++ Code:

    class Solution {
    public:
        double Power(double base, int exponent) {
            if (equal(base,0.0) && exponent < 0){
                return 0;
            }
            unsigned int absexponent = (unsigned int)(exponent);
            if (exponent < 0){
                absexponent = (unsigned int)(-exponent);
            }
            double result = PowerDeal(base,absexponent);
            if (exponent < 0){
                result = 1.0 / result;
            }
            return result;
        }
        bool equal(double num1,double num2){
            if ((num1 - num2 > -0.0000001) && (num1-num2<0.0000001)){
                return true;
            }else{
                return false;
            }
        }
        double PowerDeal(double base,unsigned int exponent){
            double result = 1.0;
            for (int i = 1;i<=exponent;i++){
                result *= base;
            }
            return result;
        }
    };

    Python Code:

    # -*- coding:utf-8 -*-
    class Solution:
        def Power(self, base, exponent):
            # write code here
            if base == 0 and exponent <= 0:            #考虑边界,当base为0并且指数小于0,便没有意义
                return 0
            absexponent = abs(exponent)                #求绝对值
            result = self.PowerDeal(base,absexponent)  #只求正数的指数
            if exponent == 0:                          #如果指数为0,则结果为1
                return 1
            elif exponent < 0:                         #如果指数为负数,则结果是正数的倒数
                result = 1 / result
            return result
        def PowerDeal(self,base,exponent):             #采用循环的思路是O(n)
            result = 1.0
            for i in range(exponent):
                result *= base
            return result  
        def IterPowerDeal(self,base,exponent):         #采用递归的思路,将是logn
            if base == 0:
                return 1
            if base == 1:
                return base
            result = self.IterPowerDeal(base,exponent//2)
            result *= result
            if exponent & 0x1 == 1:
                result *= base
            return result
            

    总结:

      要考虑边界条件,异常处理,正常的逻辑功能。

  • 相关阅读:
    jekins接通gitee的webhook做自动部署 vue、react、java、springBoot
    vue可复用性 & 组合
    vite使用短链接
    Ubuntu12.04(X86_64)上安装Mesa8.0.4
    回调函数
    c#隐式转换
    OpenGL ES2 的OffScreen实现
    Catch exception from other thread
    C# []、List、Array、ArrayList 区别及应用
    redhat update
  • 原文地址:https://www.cnblogs.com/missidiot/p/10773998.html
Copyright © 2020-2023  润新知