切換
舊版
前往
大廳
主題

ZeroJudge - e455: 二進位的絕對值 解題心得

Not In My Back Yard | 2019-10-11 22:29:43 | 巴幣 0 | 人氣 237

題目連結:


題目大意:
給定一個 16 位元的二進位整數(以二補數方式編碼成十進位數字),求該數字所代表的十進位數字之絕對值。

記憶體限制:8 MB 。



範例輸入:
1111111111111111
0000000000000001


範例輸出:
1
1


解題思維:
因為記憶體限制的緣故,C++ 語言不能導入 iostream 此標頭檔。請改用 stdio.h 標頭。

因為 C++ 、 C 有一個資料型態為 short ,其剛好是 16 位元所組成的。因此宣告一個 short 型態之變數 N,我們可以每讀入一個字元,就將 N 利用位元運算左移 1 位元並加上讀入的字元之值(是「0」加 0 ;是「1」加 1 )。

最後讀完 16 個字元後, N 的值即是輸入的二進位數字在十進位所代表之數字(內建的左移運算有考慮到二補數,所以不須額外考量)。接著,就判斷 N 是否大於 0 ,來決定該輸出的值。

要注意 short 型態只能儲存 -32768 ~ 32767 之值,當 -32768 取絕對值時會超過 short 所能儲存之範圍。

由於測試資料量不小,且時限頗緊。因此,需要介於 getchar() 等函式讀取字元。

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

創作回應

更多創作