計蒜客 補碼 模擬題

2021-09-26 16:36:34 字數 1650 閱讀 7934

無論原碼、反碼還是補碼,第一位都是符號位,當第一位為 00 時,表示非負數;反之表示負數。

原碼:除符號位外,餘下位上的數為原數的絕對值(注意,這裡是二進位制)。

反碼:非負數的反碼就是其本身;負數的反碼是在原碼的基礎之上,符號位不變,餘下的所有位取反。

補碼:非負數的補碼就是其本身;負數的補碼就是在反碼的基礎之上 +1+1。

我們通過如下幾個例子來進一步理解原碼、反碼和補碼:

十進位制數 原碼 反碼 補碼

8585 0101 0101 0101 0101 0101 0101

-85−85 1101 0101 1010 1010 1010 1011

99 0000 1001 0000 1001 0000 1001

-9−9 1000 1001 1111 0110 1111 0111

不過蒜頭君今天想讓你嘗試計算的不是 88 位的補碼,而是 3232 位的補碼,因為int是 44 位元組 3232 位的。3232 位的補碼是最高一位為符號位,剩下 3131 位是跟數的大小有關的。

蒜頭君會把乙個 3232 位補碼給你,讓你幫忙算一下它對應的十進位制數是多少。

輸入格式

輸入第一行,包含乙個僅有』0』, '1』組成的字串,且長度為 3232 。

輸出格式

輸出一行,包含乙個整數,表示這個補碼對應的十進位制數。

資料範圍

對於 60%60% 的資料,補碼最高位為』0』。

對於 100%100% 的資料,字串僅由』0』, '1』組成,且長度為 3232 。

輸出時每行末尾的多餘空格,不影響答案正確性

樣例輸入1 複製

00000000000000000000000001010101

樣例輸出1 複製

85樣例輸入2 複製

11111111111111111111111110101011

樣例輸出2 複製

-85思路:一開始將補碼想麻煩了,反碼換補碼,只用結果+1即可。

直接按題意模擬即可。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define n 100010

using namespace std;

const

int maxn =

100000+5

;char a[maxn]

;int

main()

if(a[i]

=='1')}

}}else

if(a[0]

=='1')if

(a[i]

=='1')}

}if(a[0]==

'1')

printf

("-%lld\n"

,sum+1)

;else

printf

("%lld\n"

,sum)

;return0;

}

計蒜客刷題 1

1.資料範圍 相信你已經學會 a ba b 問題了,那麼問題又來了 輸入兩個正整數 aa 和 bb 求a b。輸入格式 一行,包含兩個正整數 a 和 b,中間用單個空格隔開。1 a,b 50000。輸出格式 乙個整數,即a b 的值。include using namespace std intma...

計蒜客(數學題)

a i 1 2a i 2c i a i 1 假設a 1 0的情況下帶進去,然後把最後真正的a n 1 和假設出來的a n 1 相減然後除以 n 1 就是答案。這裡的n 1是通過規律看出來的。include include include include include include include...

2017計蒜客複賽簽到題

確實,最近臨近期末,各種事情要多起來了,這估計是這學期最後一次acm的題了。由於時間因素只做了一道簽到題就匆匆走人,不過完美ac簽到題,也算是給這學期的acm畫上了乙個圓滿的句號了吧,開始了自己的部落格生涯,挺好。思路 這題根據題意,很容易想到直接模擬,而資料範圍顯示可以直接開二元陣列強行記錄,而對...