我只是在这备份下……忘记的时候再来看。。
#include<bits/stdc++.h>
#define maxn 12000
using namespace std;
char s1[maxn],s2[maxn];
namespace Bignum
{
struct bignum
{
int len,num[maxn];
bignum()
{
len=0;
memset(num,0,sizeof(num));
}
bignum operator = (const char *s)
{
len=strlen(s+1);
for(int i=1;i<=len;i++)
num[i]=s[len-i+1]-'0';
return *this;
}
friend bool operator<(bignum a,bignum b)
{
if(a.len<b.len)return true;
if(a.len>b.len)return false;
for(int i=a.len;i>=1;i--)
if(a.num[i]<b.num[i])return true;
else if(a.num[i]>b.num[i])return false;
return false;
}
friend bignum operator+(bignum a,bignum b)
{
bignum c;
int len=max(a.len,b.len);
for(int i=1;i<=len;i++)
{
c.num[i]+=a.num[i]+b.num[i];
int k=i;
while(c.num[k]>=10)
{
c.num[k+1]+=c.num[k]/10;
c.num[k++]%=10;
}
c.len=k;
}
while(c.num[c.len]==0&&c.len>=2)c.len--;
return c;
}
friend bignum operator-(bignum a,bignum b)
{
bool flag=0;
if(a<b)
{
swap(a,b);
flag=1;
}
for(int i=1;i<=a.len;i++)
{
a.num[i]-=b.num[i];
int k=i;
while(a.num[k]<0)
{
a.num[k+1]--;
a.num[k++]+=10;
}
while(a.num[a.len]==0&&a.len>=2)a.len--;
}
if(flag)a.num[++a.len]='-';
return a;
}
friend bignum operator*(bignum a,bignum b)
{
bignum c;
for(int i=1;i<=a.len;i++)
for(int j=1;j<=b.len;j++)
{
c.num[i+j-1]+=a.num[i]*b.num[j];
int k=i+j-1;
while(c.num[k]>=10)
{
c.num[k+1]+=c.num[k]/10;
c.num[k++]%=10;
}
c.len=k;
}
while(c.num[c.len]==0&&c.len>=2)c.len--;
return c;
}
};
void print(bignum a)
{
if(a.num[a.len]=='-')
{
printf("-");
a.len--;
}
for(int i=a.len;i>=1;--i)
printf("%d",a.num[i]);
puts("");
}
}using namespace Bignum;
int main()
{
return 0;
}