壓 \(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 ...