**没废话,直接答案**
- 第1关:准备工作:字符串
- 第2关:实现除二取余方法
- 第3关:改进程序
- 第4关:递归函数
- 第5关:算法复杂度
- 第6关:除二取余方法的递归实现
- 第7关:递归程序的改进
- 第8关:Python对进制转换的支持
第1关:准备工作:字符串
ID = input() #ID表示学号
########## Begin ##########
if (len(ID)!=8): #如果学号不是8位
print('不是8位')
if (ID[0:2]!= "20"): #如果学号未以20开头
print('未以20开头')
if ID[2:4] not in ["18","19","20"]: #如果学号3、4位不正确
print('第3、4位不正确')
for x in ID: #对于学号中的每一位x
if (x not in '0123456789'): #如果x不是数字字符
print(x, '不是数字')
########## End ##########
print('检查完成')
第2关:实现除二取余方法
########## Begin ##########
def DecToBin_int(d):
b=""
while (d!=0):
b=str(d%2)+b
d=d//2
return b
########## End ##########
d = int(input())
print(DecToBin_int(d))
第3关:改进程序
########## Begin ##########
def DecToBin_int(d):
b = ''
if d==0:
return 0
elif d>0:
while d!=0:
b = str(d%2)+b
d = d//2
return b
else:
d=-d
while d!=0:
b = str(d%2)+b
d = d//2
return '-'+b
########## End ##########
d = int(input())
print(DecToBin_int(d))
第4关:递归函数
########## Begin ##########
def F(n):
if n == 1:
return 1
elif n==0:
return 0
else:
return F(n-1)+F(n-2)
########## End ##########
n = int(input())
print(F(n))
第5关:算法复杂度
cache = [1, 1] #用于存储已算出的项,第i号元素对应第i+1项,最开始时存放了第1、2项
def F(n):
if len(cache)>=n: #先到列表中查询,若列表中包含了F(n)
return cache[n-1] #则直接返回F(n)
else: #否则计算F(n)
Fn = F(n-1)+F(n-2) #计算F(n)的方法与之前相同
cache.append(Fn) #将计算结果存入列表,以便后续直接使用
return Fn #返回计算结果
n = int(input())
print(F(n))
第6关:除二取余方法的递归实现
########## Begin ##########
def f(d):
if d == 1:
return '1'
else:
return f(d//2) + str(d%2)
########## End ##########
d = int(input())
print(f(d))
第7关:递归程序的改进
def f(d):
if d==1:
return '1'
elif d>0:
return f(d//2)+str(d%2)
########## Begin ##########
if d==0:
return 0
if d<0:
d=-d;
return '-'+f(d//2)+str(d%2)
########## End ##########
d = int(input())
print(f(d))
第8关:Python对进制转换的支持
d = int(input())
########## Begin ##########
b=bin(d)
b = b.replace( '0b', '' )
########## End ##########
print(b)