題目連結:
給定一非負整數 n (n < 2 ^ 31),請將 n 分解為 2 的次方表示式(次方的部分用小括號框起),且表示式中不是 0 或是 2 的也要各自轉成 2 的次方表示式。重複步驟直到表示式只由 0 、 2 組成。其中 2 ^ 1 直接寫作 2 即可。
例如 n = 137 = 2 ^ 7 + 2 ^ 3 + 2 ^ 0 = 2(7)+2(3)+2(0) = 2(2(2)+2+2(0))+2(2+2(0))+2(0)
2
2(2(2)+2+2(0))+2(2+2(0))+2(0)
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
因為 n < 2 ^ 31 ,所以次方表示法裡面只會出現 0 ~ 30 的數字。因此,我們可以先求出 n = 0 ~ 30 的表示式,其他情況便可以直接套用現有的而不用遞迴重複求解。
而 n = 0 、 1 、 2 的表示法分別是 0 、 2(0) 以及 2 ;3 以上的數字則利用位元運算從高位元到低位元看其哪些位元是 1 (代表有哪些 2 的次方項)。然後以已知的數字建構出這些數字的表示法。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。