題目連結:
給定一個 16 位元的二進位整數(以二補數方式編碼成十進位數字),求該數字所代表的十進位數字之絕對值。
記憶體限制:8 MB 。
1111111111111111
0000000000000001
因為記憶體限制的緣故,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() 等函式讀取字元。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。