ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

剑指offer-实现power,打印1到n位最大数

2020-02-20 17:57:08  阅读:239  来源: 互联网

标签:Isbeginning0 num 最大数 power offer 打印 nSum ret base


实现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)

标签:Isbeginning0,num,最大数,power,offer,打印,nSum,ret,base
来源: https://www.cnblogs.com/void-lambda/p/12336659.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有