高精度板子
#pragma GCC optimize("O2")
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<bitset>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<stack>
#include<set>
#include<map>
#include<limits.h>
#include<ctime>
#define N 100001
typedef long long ll;
const int inf=0x3fffffff;
const int maxn=2017;
const int mod=1000000007;
using namespace std;
inline int read()
{
int f=1,x=0;char ch=getchar();
while(ch>'9'||ch<'0')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0')
{
x=(x<<3)+(x<<1)+ch-'0';
ch=getchar();
}
return f*x;
}
struct bnum
{
short a[N];
int size;
bnum()
{
memset(a,0,sizeof a);
size=1;
}
bnum(ll k)
{
*this=k;
}
bnum operator =(ll k)
{
char ch[1000];
sprintf(ch,"%lld",k);
size=strlen(ch);
for(int i=0;i<size;i++)
a[i]=ch[size-i-1]-'0';
return *this;
}
bool operator <(bnum b)
{
if(size==b.size)
{
for(int i=size-1;i>=0;i--)
{
if(a[i]<b.a[i])return 1;
if(a[i]>b.a[i])return 0;
}
return 0;
}
else return size<b.size;
}
bool operator >=(bnum b)
{
return !(*this<b);
}
bool operator >(bnum b)
{
return b<*this;
}
bool operator ==(bnum b)
{
return (!(*this<b)&&(!(b<*this)));
}
bnum operator +(bnum b)
{
bnum c;
int lena=size,lenb=b.size;
c.size=max(lena,lenb)+1;
for(int i=0;i<c.size+1;i++)
{
c.a[i]+=a[i]+b.a[i];
if(c.a[i]>=10)
c.a[i]-=10,c.a[i+1]++;
}
if(!c.a[c.size-1]&&c.size>1)
c.size--;
return c;
}
bnum operator -(bnum b)
{
bnum c;
int lena=size,lenb=b.size;
c.size=max(lena,lenb);
for(int i=0;i<c.size;i++)
{
c.a[i]+=a[i]-b.a[i];
if(c.a[i]<0)
c.a[i]+=10,c.a[i+1]--;
}
while(!c.a[c.size-1]&&c.size>1)c.size--;
return c;
}
bnum operator /(bnum b)
{
bnum c,d,q=*this;
c.size=size-b.size+1;
for(int i=c.size-1;i>=0;i--)
{
d.clear();
d=b.numcpy(i+1);
while(q>=d)
{c.a[i]++;q=q-d;}
}
while(!c.a[c.size-1]&&c.size>0)c.size--;
return c;
}
bnum operator %(bnum b)
{
bnum c,d,q=*this;
c.size=size-b.size+1;
for(int i=c.size-1;i>=0;i--)
{
d.clear();
d=b.numcpy(i+1);
while(q>=d)
{c.a[i]++;q=q-d;}
}
return q;
}
private:
void clear()
{
memset(a,0,sizeof a);
size=1;
}
bnum numcpy(int k)
{
bnum c;
for(int i=0;i<size;i++)
c.a[i+k-1]=a[i];
c.size=size+k-1;
return c;
}
};
ostream& operator <<(ostream &os,bnum x)
{
for(int i=x.size-1;i>=0;i--)
printf("%d",x.a[i]);
return os;
}
istream& operator >>(istream &is,bnum &x)
{
char ch[N];
scanf("%s",ch);
x.size=strlen(ch);
for(int i=0;i<x.size;i++)
{
x.a[i]=ch[x.size-i-1]-'0';
}
return is;
}
ll qpow(ll a,ll b)
{
ll res=1;
while(b)
{
if(b&1)
res=res*a;
a=a*a;
b>>=1;
}
return res;
}
ll cpy(bnum b)
{
ll res=0;
for(int i=0;i<b.size;i++)
res+=qpow(10,i)*b.a[i];
return res;
}
就让我永远不在这里写下什么有意义的话——by 吉林神犇 alone_wolf

浙公网安备 33010602011771号