2的次幂表示(递归求解)
問題描述
任何一個正整數都可以用2進制表示,例如:137的2進制表示為10001001。
將這種2進制表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=27+23+2^0
現在約定冪次用括號來表示,即a^b表示為a(b)
此時,137可表示為:2(7)+2(3)+2(0)
進一步:7=22+2+20 (2^1用2表示)
3=2+2^0
所以最后137可表示為:2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:1315=210+28+2^5+2+1
所以1315最后可表示為:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
輸入格式
正整數(1<=n<=20000)
輸出格式
符合約定的n的0,2表示(在表示中不能有空格)
樣例輸入
???????137
樣例輸出
???????2(2(2)+2+2(0))+2(2+2(0))+2(0)
樣例輸入
???????1315
樣例輸出
???????2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
提示:采用非遞歸程序較難解決,可以采用邊遞歸變輸出
???????這里的提示也已經很明顯了,說到是邊遞歸邊輸出,對于我這遞歸學的很渣的人,確實得寫寫博客反思、補補了。
???????在這里我們先將它轉化為二進制,這是毫無疑問的,在邊轉化為二進制時,邊統計1在二進制中所出現的位置,用一個數組將它存起來如a[],但如何實現遞歸呢,這里如137 = 2^ 7 + 2^ 3 + 2^ 0,此時的一個數組記錄下了7、3、0,但是對應的7、3不滿足條件,怎么辦,這里就可以采用遞歸了,7 = 2^ 2 + 2^ 1 + 2^ 0,這時就滿足條件了,記錄下對應的2、1、0,同理3 = 2^ 1 + 2^ 0也滿足條件了,記錄下對應的1、0。
???????這里又有一個很重要的點,就是終止條件,我們想一想,他只是換了一種表達形式,我們所記錄下的為它的指數,所以:
???????1.如果a[i] == 1,輸出為2
???????2.如果a[i] == 2,輸出為2(2)
???????3.如果a[i] == 0,輸出為2(0)
???????我想講到這里應該很清楚了
代碼如下:
強調,這里的數組a[]必須是局部變量,被重新定義,不然就會修改原來的值,在這里,被卡了好久,為什么不對呢…
總結
以上是生活随笔為你收集整理的2的次幂表示(递归求解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [JZOJ3385] [NOIP2013
- 下一篇: Unity3d简谐运动振屏效果实现