高精度模板
高精度模板
#include<bits/stdc++.h> using namespace std; class Bigint { public : int fig[7010],len; void decr() { while(len > 1 and (not fig[len-1])) len--; } Bigint() { memset(fig,0,sizeof(fig)); len = 1;} Bigint(int num) { *this = num; } Bigint(char *num) { *this = num; } Bigint operator = (const char* num) { memset(fig,0,sizeof(fig)); len = strlen(num); for(int i = 0;i < len;i++) fig[i] = num[len-i-1] - '0'; decr(); return *this; } Bigint operator = (int num) { char s[7010]; sprintf(s,"%d",num); return *this = s; } Bigint operator + (Bigint b) { Bigint a = *this; int i; for(i = 0;i < b.len;i++) { a.fig[i] += b.fig[i]; if(a.fig[i] > 9) a.fig[i] %= 10,a.fig[i+1]++; } while(a.fig[i] > 9) a.fig[i++] %= 10,a.fig[i]++; a.len = max(len,b.len); if(a.fig[i] and a.len <= i) a.len = i + 1; return a; } Bigint operator - (Bigint b) { Bigint a = *this; int i; for(i = 0;i < b.len;i++) { a.fig[i] -= b.fig[i]; if(a.fig[i] < 0) a.fig[i] += 10,a.fig[i+1]--; } while(a.fig[i] < 0) a.fig[i++] += 10,a.fig[i]--; a.decr(); return a; } Bigint operator * (Bigint b) { Bigint a; a.len = len + b.len; for(int j = 0;j < b.len;j++) for(int i = 0;i < len;i++) a.fig[i+j] += fig[i] * b.fig[j]; for(int i = 0;i < a.len - 1;i++) a.fig[i+1] += a.fig[i] / 10,a.fig[i] %= 10; a.decr(); return a; } Bigint operator / (Bigint b) { Bigint c = *this,a = 0; for(int i = len - 1;i >= 0;i--) { a = a * 10 + fig[i]; for(int j = 0;j < 10;j++) { if(a < b * (j + 1)) { c.fig[i] = j; a = a - b * j; break; } } } c.decr(); return c; } Bigint operator % (Bigint b) { Bigint a = 0; for(int i = len - 1;i >= 0;i--) { a = a * 10 + fig[i]; for(int j = 0;j < 10;j++) if(a < b * (j + 1)) { a = a - b * j; break; } } return a; } Bigint operator += (Bigint b) { *this = *this + b; return *this; } bool operator < (Bigint b) { if(len != b.len) return len < b.len; for(int i = len - 1;i >= 0;i--) if(b.fig[i] != fig[i]) return fig[i] < b.fig[i]; return false; } bool operator > (Bigint b){ return b < *this; } bool operator <= (Bigint b){ return (not (b < *this)); } bool operator >= (Bigint b){ return (not(*this < b)); } bool operator != (Bigint b){ return (b < *this) or (*this < b); } bool operator == (Bigint b){ return (not (b < *this)) and (not(*this < b)); } string str() const { char s[7010] = {}; for(int i = 0;i < len;i++) s[len-i-1] = fig[i] + '0'; return s; } }; istream& operator >> (istream& in,Bigint& x) { string s; in >> s; x = s.c_str(); return in; } ostream& operator << (ostream& out,Bigint& x) { out << x.str(); return out; } Bigint a,b,ans; signed main() { cin >> a >> b; ans = a / b; cout << ans << endl; return 0; }

浙公网安备 33010602011771号