安全性は、nビットの最大数を印刷するために、電力を達成オファー証明

パワーを実現

アイデア:

注再帰、F(N)= F(N / 2)と考えることができる場合には、n乗の数を見つける場合のベースは0、exexponent <0であるF(N / 2)も-F(N)= fは( N- / 2) F(N / 2)*ベース奇数

コード:

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

Nビットの最大数を印刷する1

説明

例えば、最大ビット数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)

おすすめ

転載: www.cnblogs.com/void-lambda/p/12336659.html