[題解] UVa 11933 - Splitting Numbers
Tags
- 題解
- UVa
- E難度
略譯
給一個數字 n,將二進位表達時所有的 1 抓出來,
從個位數開始,第奇數個 1 放到 a,第偶數個 1 放到 b
這樣 a+b 剛好是 n,求 a 和 b
題解
需要了解二進位制,最好要會基本的位元運算。
會的話這題只要枚舉二進位每個位數,
抓到 1 時,看是第奇數個 1 還是偶數個 1 分別放到 a 或 b,
模擬一下就解了。
實作提示
- 可以枚舉 i = 0 ~ 30 再用 1<<i 取得那一個位數,
能避免迴圈每一次把 i 變成兩倍時,結束條件沒抓好不小心 overflow 的悲劇 - 利用 i = 1-i 會在 0 和 1 之間來回循環的特性,
a 和 b 可以用 a[0] 和 a[1] 透過 i 來交替,會比 if 簡化一些
cmusu