討厭型別的副社長

發布時間: Jan. 4, 2023, 5:49 p.m.   最後更新時間: Sept. 14, 2023, 9:41 p.m.   時間限制: 1000ms   記憶體限制: 128M

眾所皆知,在C++裡面有十分多的變數型別,如int, float, double, char, bool等等

還有十分多的修飾語,如long, long long, short, unsigned等等

而副社長就經常因為用錯型別或修飾語而吃WA,所以他決心要搞清楚每種型別的定義

以下為他整理所查到資料得到的總結的一部分

一、型別

1.int

中文為整數,由4個byte存儲,有正負號之分

範圍為$[-2^{31},2^{31}-1]$

如果超過範圍會溢位

並以類似環的概念從$2^{31}-1$變成$-2^{31}$

或從$-2^{31}$變成$2^{31}-1$

用INT_MAX可以取到int的最大值而用INT_MIN可以取到int的最小值(需引入limits.h函式庫)

2.char

中文為字元,由1個byte存儲

存的方法類似整數

只是範圍是$[0,255]$

且取值或輸出時會對應到相對的ascii-code取得字元

ascii表會附在最下面

因為char存的方法類似整數,所以是可以和整數做運算比較的(這似乎要看環境)

3.bool

中文為布林值,由1個byte存儲

但其實只會用一個0或1

所以其實還蠻浪費記憶體空間的

布林值在取值時會回傳true或false

看當時布林值是存0還是1,0為false,1為true

......

二、修飾語(因為通常用在整數上,所以這裡只針對整數)

1.long int

中文是長整數

在某些環境下範圍和整數一模一樣

可是在新一點的環境卻是整數的平方倍

範圍為$[-2^{63},2^{63}-1]$

其餘皆和整數相同

2.long long int

中文為超長整數

範圍必為整數的平方倍

為$[-2^{63},2^{63}-1]$

其餘皆和整數相同

3.short int

中文為短整數

範圍為整數的根號倍

為$[-2^{15},2^{15}-1]$

4.unsigned int

中文為無號整數

顧名思義是沒有分正負號的整數

範圍會把整數負號的部分拿給正數使用

範圍為$[0,2^{32}-1]$

其餘皆和整數相同

5.unsigned long int

中文為無號長整數

顧名思義是沒有分正負號的長整數

範圍會把整數負號的部分拿給正數使用

且一樣在不同的環境範圍可能有差異

範圍為$[0,2^{32}-1]$

或$[0,2^{64}-1]$

其餘皆和長整數相同

6.unsigned long long int

中文為無號超長整數

顧名思義是沒有分正負號的超長整數

範圍會把整數負號的部分拿給正數使用

範圍為$[0,2^{64}-1]$

其餘皆和超長整數相同

7.unsigned short int

中文為無號短整數

顧名思義是沒有分正負號的短整數

範圍會把整數負號的部分拿給正數使用

範圍為$[0,2^{16}-1]$

其餘皆和短整數相同

......

看了那麼多應該也累了,但其實現在副社長遇到解決問題十分簡單,請看輸入描述吧

ascii-code table:


Ascii-codes-table.png

給你一個整數$n$

請輸出最小的無號超長正整數$k$使得以下判斷式為true,若k不存在則輸出-1

判斷式: $n+k == n-k$

複製範例
本題無範例輸入出
請自己加油吧owo

結果副社長還是吃WA

基礎語法

竹中軟研38th第二次競賽(社內暨日麻成就賽)