一个小于等于31的数 用公式怎么算出是这5个数1,2,4,8,16任意相加的结果

每个数只能用一次例如14=8+4+2;而不是14=8+2+2+2... 每个数只能用一次 例如 14=8+4+2;而不是14=8+2+2+2 展开
匿名用户
2013-12-03
展开全部
用二进制来解释吧

1= 1(2进制)
2= 10(2进制)
4= 100(2进制)
8= 1000(2进制)
16= 10000(2进制)

31=11111(2进制)=10000+1000+100+10+1(2进制)
则31=16+8+4+2+1
30=11110(2进制) =10000+1000+100+10(2进制)
则=16+8+4+2
19=10011 =10000+10+1(2进制)
则=16+2+1

其余以此类推

总结起来就是

整数除以2,然后再用商除以2,直到商等于0为止,以每次的余数(1或0)进行计算 ,第一次余数乘以1,第二次的余数乘以2,第三次的余数乘以4。。。第y次余数乘以2^(y-1),所有余数相加则得原整数。
以30为例:
30/2=15 余0 第1次计算,0(余数)×2^(1-1)=0
15/2=7 余1 第2次计算,1(余数)×2^(2-1)=2
7/2=3 余1 第3次计算,1(余数)×2^(3-1)=4
3/2=1 余1 第4次计算,1(余数)×2^(4-1)=8
1/2=0 余1 第5次计算,1(余数)×2^(5-1)=16
则30=2+4+8+16
以27为例:
27/2=13 余1 第1次计算,1(余数)×2^(1-1)=1
13/2=6 余1 第2次计算,1(余数)×2^(2-1)=2
6/2=3 余0 第3次计算,0(余数)×2^(3-1)=0
3/2=1 余1 第4次计算,1(余数)×2^(4-1)=8
1/2=0 余1 第5次计算,1(余数)×2^(5-1)=16
则27=1+2+8+16
追问
在java程序中采用递归应该怎么写啊?
追答

编程语言我一门都没学会~~~~~  - -!


我用一个简单的excel表格表示一下吧



推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式