無符號整數壓位高精板子

2022-09-21 21:06:18 字數 1552 閱讀 6467

using namespace std;

///繼承vector解決位數限制,操作方便

struct huge_int:vector

huge_int(const string &str)

///格式化,包括進製和去前導0,用的地方很多,先寫乙個

huge_int & format()//位外進製

return *this;//為使用方便,將進製後的自身返回引用

}///過載等於,初始化、賦值、輸入都用得到

huge_int operator=(long long n)

huge_int operator=(const string &str)

return *this;

}///過載輸入輸出

friend istream & operator>>(istream &is, huge_int &tmp)

friend ostream & operator<<(ostream &os, const huge_int &tmp)

friend bool operator==(const huge_int &a,const huge_int &b)

friend bool operator<(const huge_int &a,const huge_int &b)

///加法,先實現+=,這樣更簡潔高效

friend huge_int & operator+=(huge_int &a,const huge_int &b)}}

return a.format();

}friend huge_int operator-(huge_int a,const huge_int &b)

friend huge_int & operator--(huge_int &a)

friend huge_int operator--(huge_int &a,int)

///乘法,不能先實現*=,因為是類多項式相乘,每位都需要保留,不能覆蓋

friend huge_int operator*(const huge_int &a,const huge_int &b)

friend huge_int & operator*=(huge_int &a,const huge_int &b)

///帶餘除法函式,方便除法和模運算,會改變a的值,所以先實現/盡量不多餘地修改原來變數

///o(base/width*logn),待修改

friend huge_int divmod(huge_int &a,const huge_int &b)

return ans;

}friend huge_int operator/(huge_int a,const huge_int &b)

friend huge_int & operator/=(huge_int &a,const huge_int &b)

friend huge_int & operator%=(huge_int &a,const huge_int &b)

friend huge_int operator%(huge_int a,const huge_int &b)int main()

P1601 高精加法 壓位

原題鏈結 高精加法是比較熟悉的乙個高精了 但是現在要練習壓位 一開始覺得 簡單的合併就好 後來想起來還要 保證壓的這幾位是順序 但是整體是倒序 想了個比較麻煩的辦法 include include include include include include include include usi...

在乙個無符號整數中翻轉位的順序

1 題目 請編寫函式 unsigned int reverse bits unsigned int value 這個函式的返回值是把value 的二進位制位模式從左到右變換一下後的值。例如,在 32位機器上,25這個值包含下列各個位 00000000000000000000000000011001 ...

判斷32位無符號整數二進位制中1的個數

1 比較簡單和容易理解的方法就是逐位比較法 include using namespace std int findone unsigned int n int main 這種方法的缺點是比較費時,時間長度取決於n的位數,時間複雜度o n 假如上千上萬位的話,每一位都要執行一遍,所用時間就很長了。2...