パワーを実現
アイデア:
注再帰、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)