zoukankan      html  css  js  c++  java
  • 剑指offer-实现power,打印1到n位最大数

    实现power

    思路:

    注意base为0,exexponent<0时的情况,求一个数的n次方可以用递归的思想,f(n)=f(n/2)f(n/2) 偶数 f(n)=f(n/2)f(n/2)*base 奇数

    代码:

    def power(base,exponent):
        if(equal_zero(base) and exponent<0):
            raise  ZeroDivisionError
        else:
    
            ret=power_value(base,abs(exponent))
            if exponent<0:
                ret=1.0/ret
            return ret
    def equal_zero(n):
        if abs(n-0.0)<0.00001:
            return True
        else:
            return False
    def power_value(base,exponent):
        if exponent==0:
            return 1
        if exponent==1:
            return base
        ret=power_value(base,exponent>>1)  #右移等价于/2
        ret=ret*ret
        if exponent &1==1:  #递归,f(n)=f(n/2)*f(n/2) 偶数 f(n)=f(n/2)*f(n/2)*base 奇数
            ret=ret*base
        return ret
    print(pow(0,-1))
    

    打印1到n位最大数

    描述

    输入n,打印1到最大n位数,比如:n=3,打印1-999

    思路:

    大数用字符串表示,在字符串上不断+1,直到最大位产生进位时停止,每一次并不断从第一个不为0的数开始打印

    代码:

    def Print1ToMaxOfNum(n):
        if(n<=0):
            return
        num=['0']*(n+1)
        while not Increment(num):
            PrintNumber(num)
        return
    
    def Increment(num):  #自增1,并判断临界点,最高位+1后是否变为0
        isOverflow=False
        ntakeover=0
        nlength=len(num)
        for i in range(nlength-1,-1,-1):
            nSum=int(num[i])+ntakeover
            if i==nlength-1:
                nSum+=1
            if nSum>=10:
                if i==0:
                    isOverflow=True
                else:
                    nSum-=10
                    ntakeover=1
                    num[i]=str(nSum)
            else:
    
                num[i]=str(nSum)
                break
    
        return isOverflow
    def PrintNumber(num):  #从第一个不为0的数开始打印
        Isbeginning0=True
        length = len(num)
        for i in range(length):
            if Isbeginning0 and num[i]!='0':
                Isbeginning0=False
            if not Isbeginning0:
                print(num[i],end='')
        print(' ',end='')
    # 也可以递归打印
    Print1ToMaxOfNum(3)
    
    
  • 相关阅读:
    ExecutorService 的理解与使用
    web项目答辩问题
    JAVA面试,项目面试
    jQuery常用的事例
    利用poi实现解析Excel
    itext实现转换pdf
    ajax传参数组之request.getParameterValues
    Android.26.Activity之间参数的传递方式
    Android.25.SP,SQLite,Room
    Android.24. RxJava
  • 原文地址:https://www.cnblogs.com/void-lambda/p/12336659.html
Copyright © 2011-2022 走看看