2的幂次方表示
【题目描述】
任何一个正整数都可以用2的幂次方表示。例如:
137=27+23+20
同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:
2(7)+2(3)+2(0)
进一步:7=22+2+20(21用2表示)
3=2+20
所以最后137可表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:
1315=210+28+25+2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
【输入描述】
一个正整数n(n≤20000)。
【输出描述】
一行,符合约定的n的0,2表示(在表示中不能有空格)。
【输入样例】
137
【输出样例】
2(2(2)+2+2(0))+2(2+2(0))+2(0)
【分析】
(1)21不能写成21,只能写成2
(2)最后分解的结果只有2和0,没有分解的继续分解
(3)最后的结果是一堆字符串的形式
【思路1】: 递归模式
【思路2】:模拟和枚举
在初赛部分讲过进制转换,枚举到2的10次方,然后这个题的数据范围是20000,可以通过枚举的方式进行。先去定义一个数组
1 2 | int num[16]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768};// 最后一个32768是2的16次方 |
然后在计算中先找出最大的那个数,减去最大那个数之后就继续。
补充:对于此题,不同数值表示方式
.jztagtree{max-height:85vh;right:0px}.jzDown{top:10vh}.jztagtree li a{background-color:#448EF6}.jztagtree li a:before{border-right:10px solid #448EF6}.jztagtree li a:hover{background:#0045a6}.jztagtree li a:hover::before{border-right:10px solid #0045a6}
$("#jztoc").toc({content: ".single", headings: "h1,h2,h3"});