解题思路:
用二进制对应位数是否为 1 ,来判断分解成2的次幂的情况
>>> bin(1315) '0b10100100011'
二进制第1,2,6,9,11位是1,对应分解后就是
1315 = 2^10 + 2^8 + 2^5 + 2^1 + 2^0
运用递归,对每个>幂次<调用函数自身
基础情况:
func(1) = 2(0) func(2) = 2 #注意不是2(1)
自己写的,有很长的调试过程,主要是懒得想 循环位置到底应不应该-1,或者是+1之类的简单的逻辑问题
其实找个简单的数据带进去试试就行了
注意事项:
分解的次幂是从大到小排列的
参考代码:
def tbin(num): b = [] while num != 0: b += [num%2] num //= 2 return b #转为二进制 def mfj(b): bi,t = tbin(b),'' #t为输出的结果,初始为空字符串'' for i in range(1,len(bi)+1): if bi[len(bi)-i]: if len(bi)-i == 0: #处理特殊情况 t += '2(0)+' elif len(bi)-i == 1: #处理特殊情况 t += '2+' else: t += '2('+mfj(len(bi)-i)+')+' #递归 return t[0:-1] #t在末尾会多出一个'+' a = int(input().strip()) print(mfj(a))
0.0分
5 人评分
C语言程序设计教程(第三版)课后习题9.4 (C语言代码)浏览:593 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:526 |
C二级辅导-求偶数和 (C语言代码)浏览:631 |
点我有惊喜!你懂得!浏览:961 |
小九九 (C语言代码)浏览:809 |
C语言程序设计教程(第三版)课后习题11.11 (C语言代码)浏览:768 |
C语言训练-排序问题<1> (C语言代码)浏览:1346 |
【回文数(二)】 (C语言代码)浏览:850 |
妹子杀手的故事 (C语言代码)浏览:673 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:456 |