2011年6月26日 星期日

11933 - Splitting Numbers

我們定義一種將整數 n 分割成兩個整數a(n), b(n)的方式。定義 0 <= i1< i2 < ... < ik,i1~ik為 n 的二進制值中,位元值為1的序號,最小有效位元位置為 0 (least significant bit having index 0)。我們定義a(n)的二進制位元值為1的序號依序為i1, i3, i5, ...,b(n)的二進制位元值為1的序號依序為i2, i4, i6, ...。例如,n = 110110101(二進制),之位元值為1的位置依序為:i1=0, i2=2, i3=4, i4=5, i5=7, i6=8,分成兩組(i1, i3, i5)=(0, 4, 7), (i2, i4, i6)=(2, 5, 8),表示a(n)=010010001,b(n)=100100100。a(n)位元值為1的位置為0, 4, 7,b(n)位元值為1的位置為2, 5, 8。


Input 

每組測試資料一列,為一個整數 n (1 <= n < 2^31),且以10進制表示。若 n = 0表示資料結束。

Output 

每組資料一列,輸出a(n), b(n)的十進制值,格式請參考範列資料。

Sample Input 

6
7
13
0

Sample Output 

2 4
5 2
9 4


原文出處

沒有留言:

張貼留言