C 大數板子

2021-08-28 03:45:59 字數 4103 閱讀 3310

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