今天主要講一下數學的知識。
一、進製轉換:
十進位製到k進製:短除法:順除至0,逆序取餘。
k進製轉十進位制:乘權相加。
常見進製:**制(對應2位二進位制)、八進位制(對應3位二進位制)、十六進製制(對應4位二進位制,a表示10,b表示11,...,f表示15)
常見進製在c++中的表示:二進位制:前加0b;八進位制:前加0;十六進製制:前加0x。
二、高精度
常見資料型別的範圍:int:[-232,232-1]
long long :[-263,263-1]≈1020
那麼對於超過這些資料範圍的數怎麼辦呢?(我才不說有個int_128) ,這時候就要用到高精度了。高精度就是用來解決大整數的運算。
有關高精度加減乘除的基本講解可見我的另一篇部落格,這裡只說說新的東西。
部落格位址)
對於高精度,我們可以寫好高精度過載運算子的模板,碼程式時先用int型碼好程式,用小數驗證演算法正確性後再將int改成高精型(結構體的運用),否則程式出錯後難以判斷出錯在演算法還是高精。對於初始化結構體,可用建構函式(物件導向的知識),簡單來說就是乙個不寫型別、函式名為結構體型別名、寫在結構體裡的函式,該函式每當有該結構體物件宣告時都會被呼叫一次。(與此對應的還有析構函式,有興趣的oier可以看看: 類建構函式 & 析構函式
) 配合c++中struct和class的區別 食用更佳)
**如下:
1struct
gaojing
210 }
過載運算子(以加號為例)**:
1 gaojing operator+(gaojing a,gaojing b)212if (c.z[l] != 0) l++;
13 c.l =l;
1415
return
c;16 }
細心的同學會發現,其實這個有個問題。想必大家都知道函式傳值呼叫與傳址呼叫的區別:傳值呼叫不會改變主呼叫函式中變數的值,而傳址呼叫則會改變。同時由此發現每次傳值呼叫都會拷貝乙份主呼叫函式的變數。這個變數小的話還好,但如果要是很大的陣列的話,必然會增加額外的時間複雜度,而且乙個程式的加法運算又很多,那麼呼叫函式的次數也很多,總的一看,時間就被浪費許多了。
怎麼處理這種情況?
既然傳值呼叫不行,傳址呼叫就好了嘛。同時為了防止打碼手抖改掉加數的值,可在形參表中加上const。正確**如下:
1 gaojing operator+(const gaojing &a,const gaojing &b)212if (c.z[l] != 0) l++;
13 c.l =l;
1415
return
c;16 }
其他的運算子過載大都與此相差不大。這裡再說明一下輸入輸出的過載:
**如下:
1struct
gaojing217
18 friend ostream& operator
<<(ostream &cout,const gaojing &a)
1925 };
最後tip:以上提及的四則運算符都沒有考慮有負數出現的情況,有負數需另考慮。
清北學堂培訓整理7 12
思想遲到了 裝機呢 盡快趕上 今天培訓最先開始講了個模擬 本以為不用聽,然而老師講了下一些不得不聽的東西 講了一些 習慣的養成 比如說碼風 模擬考的是細心,是將人類語言轉為的電腦語言的能力 而且模擬考的題一般 都非常長 所以一邊寫對 非常重要 這個對我真的太真實了 如果只向luogu無限除錯一般在比...
清北學堂數學筆記整理1
1 兩個整數a b,若它們除以整數m所得的餘數相等,則稱a與b對於模m同餘或a同余於b模m。記作 a b mod m 2 正數模正數為正數。正數模負數為正數。負數模正數為負數。負數模負數為負數。long 3 快速冪 long long mod long long qpow long long a,l...
清北學堂提高組突破營遊記day3
講課人更換成dms。真的今天快把我們逼瘋了。今天主攻資料結構,基本上看完我部落格能理解個大概把,1.lca 安利之前個人部落格鏈結。之前自己學過qwq。2.st表。同上。3.字串雜湊。同上。貌似我好像都學過的樣子。不過dms講的是真的好,聲情並茂 4,並查集。同上。5,樹狀陣列,同上。6,線段樹,同...