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...