壓 93 94 位打表

2022-05-01 03:42:07 字數 1293 閱讀 1745

壓 \(93\) 位打表就是把要打表的數字轉換成 \(93\) 進製, 以此來縮短打表部分的**長度. 例如打表int型數字時, 可以用 \(\lceil\log_-1)}\rceil=5\) 個字元表示(事實上,int還有負數, 但是我們遇到的題目要求的結果一般是非負數, 所以不管, 反正也是小問題). 至於為什麼是 93 位, 因為char型別裡有 95 個可見字元, \(ascii\)碼從 \(32\) 到 \(126\), 其中\"在字串表示中會引起錯誤, 所以我們跳過這兩個字元.

打表的時候可以直接把這些字串拼接在一起, 並在前面加五個空格, 然後以 \(5\) 的倍數訪問對應位置.

// 資料生成

char v[6];

char dc(int _n)

void wk(int _n)

inc(i, 0, 4) printf("%c", v[i]);

}//翻譯字元

const char s = ;

int dc(char c)

int wk(int _l, int _r)

但是今天寫壓 93 位打表的時候遇到了乙個問題, 我打表的字串中有一段??=引起trigraph警告, 據大大介紹, 因為我們學校 \(oj\) 用-std=c++xx編譯, 所以沒有關閉trigraph. 解決方案: 1. 跳過?, 壓 \(92\) 位, 畢竟想用 \(5\) 個字元表示int型的數隻需要 \(\lceil\sqrt[5]-1}\rceil=74\) 進製; 2. 跟著編譯器警告把??x處斷開; 3. 使用 \(raw string literal\), 既避免了 \(trigraph\), 還多了個\來表示, 變成 \(94\) 位. 最後一種方案個人比較喜歡.

// 資料生成

char v[6];

char dc(int _n)

void wk(int _n)

inc(i, 0, 4) printf("%c", v[i]);

}// 翻譯字元

const char s = r"( 打表內容)";

int dc(char c)

int wk(int _l, int _r)

大概是這個太簡單了, 網上都找不到相關介紹

壓位高精度模板

原先是整型陣列每個元素存1個數字,壓位高精是每位存8個數字,這樣可以加速8唄,空間也減小了。可謂是對整形陣列的充分利用。include include include include include include include include include include include in...

壓位高精度模板

不走程式,直接上板子。第乙個板子壓四位,支援帶符號的加減乘。第二個板子壓九位,支援不帶符號的四則運算和取模。都封裝了。include include include using namespace std struct intx bool operator const intx b const bo...

高精減法 不壓位

include include int main b 202 scanf s s a,b int alen strlen a blen strlen b t 0,i int a1 202 b1 202 for i 0 i alen i a1 i a alen 1 i 0 顛倒並且減去負號0 for ...