切換
舊版
前往
大廳
主題

ZeroJudge - d647: 2的次方表示數 解題心得

Not In My Back Yard | 2019-10-23 18:26:15 | 巴幣 0 | 人氣 163

題目連結:


題目大意:
給定一非負整數 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
137
1315


範例輸出:
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 的次方項)。然後以已知的數字建構出這些數字的表示法。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作