把之前自己用的大數板子公升級了一下:
更新記錄:
1 增加了讀入函式,修正輸出時的bug。
2 增加了更多的大小關係判斷,可以直接用 sort 函式排序了。
3 從以前用 long long 儲存7位變成用 int 儲存4位,對各oj泛用性更好
4 增加了對int數取模
5 去掉了從 64位整數讀入
6 **風格和細節優化
以下摘錄幾個別人的模板,備用。
hdu 4002 收穫非常大的乙個題 多功能大數模板的應用
乙個非常好用的大數類模板bignum.
hdu 1134 大數取模 使用大數模板
#include #include #include #include #include #include #include using namespace std;
const int mod=10000; //陣列每個元素儲存4位數字
const int maxlen=1000+20; //數字最長位數
class bignum
if (ans.a[0])
else ans.a[0]=p;
return ans; }
bignum operator-(bignum temp) //大數-大數
for (i=1;i<=a[0];i++) if(ans.a[i]) break;
if (i>a[0])
for (j=i;j<=a[0];j++) ans.a[j+1-i]=ans.a[j];
ans.a[0]=a[0]-i+1;
return ans; }
bignum operator*(bignum temp) //大數乘大數
if (ans.a[0])
else ans.a[0]=p;
return ans; }
bignum operator*(int temp) //大數乘以小數
if (ans.a[0])
else ans.a[0]=a[0];
if (ans.a[1]>=mod)
return ans; }
bignum operator/(int x) //大數除以小數
else
for (i=1;i<=a[0];i++) if(ans.a[i]) break;
if (i>a[0])
for (j=i;j<=a[0];j++) ans.a[j+1-i]=ans.a[j];
ans.a[0]=a[0]-i+1;
return ans; }
bignum operator/(bignum temp) //大數除以大數
if (!(low>t)&&!(temp*low>t)) return low;
return high; }
bignum operator%(bignum temp) //大數模大數
int operator%(int temp) //大數模小數
bool operator==(bignum temp) //大數與大數相等
bool operator!=(bignum temp) //不等於
bool operator>(bignum temp) //大於比較
bool operator>=(bignum temp) //大於等於比較
bool operator<=(bignum temp) //小於等於比較
bool operator<(bignum temp) //小於比較
public:
bignum ()
bignum (int x)
bignum (string str)
return -1; }
void print ()
};
第一次寫高精度的錯誤
儲存時忘了將string中的元素轉化為數字 輸出的時候忘記高位在後低位在前,沒有倒序輸出 只有單獨乙個數字時忘記考慮進製 錯誤if i a.size t b i if i b.size t a i 正確 if i a.size t b i if i b.size t a i 忘記考慮最後兩個高位相加...
第一次飛行
開始敲下這段話時,窗外下面正是一片片陽光照耀著的白雲,伴隨著張學友的歌聲,心潮起伏.雖然從初中起,我就經常乙個人坐著火車,汽車東奔西跑,坐飛機卻是第一次.早上上飛機前,心裡忐忑,必竟還是踏在陸地上踏實.但上了飛機後注意力就放在其它地方上去了,而且,運氣好的是我有乙個靠窗的位置.飛機準備起飛了,助跑加...
第一次面試
話說3月4號學院召開實習動員大會並有三家公司過來進行宣講會,分別是國家體育總局亞運專案組,金蝶和華際友天,由此開始了實習生涯。周五的傍晚,正吃著飯的時候突然收到簡訊通知,金蝶週六上午10點有個面試。當晚就瀏覽著些簡歷製作相關的網頁,為第二天做準備,總以為,簡歷弄得可以了,然後每太留意去完善 後來才知...