暂时包括大数乘 大数乘int 大数加 大数比较大小
struct Bignum{
int ct,c[50];
Bignum(){ct=0,memset(c,0,sizeof(c));};
void output(){
for(int i = ct; i >= 1; i--)
printf("%d",c[i]);
puts("");
}
Bignum(char s[],int len){
memset(c,0,sizeof(c));
for(int i = 0; i < len; i++)
c[i+1]=s[len-i-1]-'0';
ct=len;
}
Bignum operator * (const Bignum &a)const{
Bignum b;
b.ct=ct+a.ct-1;
for(int i = 1; i <= ct; i++)
for(int j = 1; j <= a.ct; j++) b.c[i+j-1]+=c[i]*a.c[j];
int p = 0;
for(int i = 1; i <= b.ct; i++){
b.c[i]+=p;
p=b.c[i]/10;
b.c[i]%=10;
}
while(p){
b.c[++b.ct]=p%10;
p/=10;
}
return b;
}
Bignum operator * (const int &a)const{
Bignum b;
int g = a;
while(g){
b.c[++b.ct]=g%10;
g/=10;
}
return (*this)*b;
}
Bignum operator +(const Bignum &a)const{
int ma = max(a.ct,ct);
Bignum b;
b.ct=ma;
for(int i = 1; i <= b.ct; i++)
b.c[i]+=a.c[i]+c[i];
int p = 0;
for(int i = 1; i <= b.ct; i++){
b.c[i]+=p;
p=b.c[i]/10;
b.c[i]%=10;
}
while(p){
b.c[++b.ct]=p%10;
p/=10;
}
return b;
}
bool operator < (const Bignum &a)const{
if(ct<a.ct) return true;
if(ct>a.ct) return false;
for(int i = ct; i >= 1; i--){
if(c[i]<a.c[i]) return true;
if(c[i]>a.c[i]) return false;
}
return false;
}
};