主題

ZeroJudge - b562: 2.神奇的「負二進位表示法」 解題心得

Not In My Back Yard | 2021-10-01 00:00:11 | 巴幣 0 | 人氣 78

題目連結:


題目大意:
定義一個一種進位制為「負二進位表示法」:跟原先的二進位類似,但是每個位元從最低位(最右側的位元)開始代表的數值為 1 、 -2 、 4 、 -8 、 16 、 -32 、……以此類推,是正負交錯的。

輸入有多列,每列給定一個負二進位表示法的數字(其為一個由 0 或 1 組成的數字字串,長度介於 1 ~ 16 之間),試問其代表的十進位數字為何?



範例輸入:
11011
10111


範例輸出:
7
19


解題思維:
模擬即可。從數字字串最右側開始掃到右邊,期間利用兩個變數來記錄當前位元表示值(一開始為 1,每掃過一個位元後乘以 (-2),不過這部分也可以利用位元運算達成)、一個來記錄所求,當對應位元為「1」時即加上當前位元表示值即可。掃完之後即可得到所求。




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

創作回應

更多創作