#include//大整數
struct biginteger
biginteger(const std::string &x)
biginteger(const biginteger &x)
//剪掉前導0
void cutleadingzero()
}//設定數的長度
void setlength()
else }}
//賦值運算子
biginteger &operator=(long long x)
do while (x > 0);
setlength();
return *this;
}//賦值運算子
biginteger &operator=(const std::string &str)
setlength();
return *this;
}//賦值運算子
biginteger &operator=(const biginteger &tmp)
//數的位數
size_t size() const
//*10^n 除法中用到
biginteger e(size_t n) const
//絕對值
biginteger abs() const
//正號
const biginteger &operator+() const
// + 運算子
biginteger operator+(const biginteger &b) const
if (!sign)
biginteger ans;
ans.num.clear();
for (int i = 0, g = 0;; i++)
ans.setlength();
return ans;
}//負號
biginteger operator-() const
// - 運算子
biginteger operator-(const biginteger &b) const
if (!sign)
if (*this < b)
biginteger ans;
ans.num.clear();
for (int i = 0, g = 0;; i++)
ans.num.push_back(x);
}ans.setlength();
return ans;
}// * 運算子
biginteger operator*(const biginteger &b) const
}while (ansll.back() == 0 && ansll.size() != 1) ansll.pop_back();
int len = ansll.size();
long long g = 0, tmp;
biginteger ans;
ans.sign = (ansll.size() == 1 && ansll[0] == 0) || (sign == b.sign);
ans.num.clear();
for (int i = 0; i < len; i++)
if (g > 0) ans.num.push_back(g);
ans.setlength();
return ans;
}// / 運算子 (大數除小數)
biginteger operator/(const long long &b) const
long long g = 0;
for (int i = num.size() - 1; i >= 0; i--)
for (int i = num.size() - 1; c.num[i] == 0; i--)
return c;
}// /運算子 (大數除大數)
biginteger operator/(const biginteger &b) const
str[i] += '0';
}biginteger ans(str);
deletestr;
ans.sign = (ans == 0 || sign == b.sign);
return ans;
}// % 運算子 (大數取模小數)
biginteger operator%(const long long &b) const
// %運算子 (大數取模大數)
biginteger operator%(const biginteger &b) const
biginteger &operator++() // ++ 運算子
biginteger &operator--() // -- 運算子
biginteger &operator+=(const biginteger &b) // += 運算子
biginteger &operator-=(const biginteger &b) // -= 運算子
biginteger &operator*=(const biginteger &b) // *=運算子
biginteger &operator/=(const long long &b) // /=運算子
biginteger &operator/=(const biginteger &b) // /= 運算子
biginteger &operator%=(const long long &b) // %=運算子
biginteger &operator%=(const biginteger &b) // %=運算子
// < 運算子
bool operator<(const biginteger &b) const //正負
else if (!sign && b.sign) //負正
else if (!sign && !b.sign) //負負
//正正
if (num.size() != b.num.size()) return num.size() < b.num.size();
for (int i = num.size() - 1; i >= 0; i--)
if (num[i] != b.num[i]) return num[i] < b.num[i];
return false;
}bool operator>(const biginteger &b) const // > 運算子
bool operator<=(const biginteger &b) const // <= 運算子
bool operator>=(const biginteger &b) const // >= 運算子
bool operator!=(const biginteger &b) const // != 運算子
bool operator==(const biginteger &b) const //==運算子
bool operator||(const biginteger &b) const // || 運算子
bool operator&&(const biginteger &b) const // && 運算子
bool operator!() // ! 運算子
//過載《使得可以直接輸出大數
friend std::ostream &operator<<(std::ostream &out, const biginteger &x)
return out;
}//過載》使得可以直接輸入大數
friend std::istream &operator>>(std::istream &in, biginteger &x)
x.sign = !start;
x = str.c_str();
return in;
}biginteger pow(int n)
return ans;
}};int main()
c 大數板子
include include include include using namespace std typedef long long ll 完全大數模板 輸出cin a 輸出a.print 注意這個輸入不能自動去掉前導0的,可以先讀入到char陣列,去掉前導0,再用建構函式。by kuangb...
c 陣列大數板子
int compare const char a,int len1,const char b,int len2 while i 0 while j 0 if jin s k jin 0 for int j 0 j k 2 j swap s j s k j 1 s k 0 複雜度 o n 複雜度o n...
高精大數板子
include include include include using namespace std typedef long long ll 完全大數模板 輸出cin a 輸出a.print 注意這個輸入不能自動去掉前導0的,可以先讀入到char陣列,去掉前導0,再用建構函式。by kuangb...