略譯

原題目連結

給一個數字 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 簡化一些