題目連結:
題目大意:
定義一個一種進位制為「負二進位表示法」:跟原先的二進位類似,但是每個位元從最低位(最右側的位元)開始代表的數值為 1 、 -2 、 4 、 -8 、 16 、 -32 、……以此類推,是正負交錯的。
輸入有多列,每列給定一個負二進位表示法的數字(其為一個由 0 或 1 組成的數字字串,長度介於 1 ~ 16 之間),試問其代表的十進位數字為何?
範例輸入:
11011
10111
範例輸出:
7
19
解題思維:
模擬即可。從數字字串最右側開始掃到右邊,期間利用兩個變數來記錄當前位元表示值(一開始為 1,每掃過一個位元後乘以 (-2),不過這部分也可以利用位元運算達成)、一個來記錄所求,當對應位元為「1」時即加上當前位元表示值即可。掃完之後即可得到所求。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。