关于长整数类的实现,该如何处理

关于长整数类的实现
我定义了一个长整数类longint(任意位数的),其中有重载运算符+、-、*、/、=等,现在我想实现longint a=111221335696543436545463234313,注意:初始化的数是任意长的,而我的构造函数是用字符串来初始化长整数的。怎么实现??还有定义了longint a、b、c三个对象。c=a+b这样表示可以,能不能c=a+124634134343134642任意数?

------解决方案--------------------
C/C++ code

#include<iostream>
#include<cstring>
using namespace std;
class big
{
public:
   big(int *b,int n,int flag)
   {
       this->b=b;
       this->n=n;
       this->flag=flag;
   }
   big(){}
   ~big(){}
   int *b;//大数组成的数组
   int n;//大数的长度
   int flag;//正负标志0是正1是负2是零
   bool iszheng()
   {
        if(flag==0)
            return true;
        if(flag==1)
        return false;
   }
   bool isling()
   {
        if(flag==2)
            return true;
        return false;
   }
   big Add(big b1)
    {
        if(flag==2&&b1.flag!=2)
        {
           return b1;
        }
        if(flag!=2&&b1.flag==2)
        {
           return *this;
        }
        if(flag==2&&b1.flag==2)
        {
           int *x=new int[1];
           x[0]=0;
           return big(x,1,2);
        }
        if(flag==1&&b1.flag==0)
        {
           big b2=*this;
           return b1.Abstract(b2);
        }
        if(flag==0&&b1.flag==1)
        {
           return Abstract(b1); 
        }
        int i=0,*t,tt=0,kk=0;
        if(n<b1.n)
        {
           t=new int[b1.n+1];
           t[b1.n]=0;
           while(i<n)
           {
           tt=b[i]+b1.b[i]+kk;
           t[i]=tt%10000;
           kk=tt/10000;
           i++;
           }
           while(i>=n&&i<b1.n)
           {
           if(kk!=0)
           {
           tt=b1.b[i]+kk;
           t[i]=tt%10000;
           kk=tt/10000;
           i++;
           }
           else
           {
             t[i]=b1.b[i];
             i++;
           }
           }
           if(kk!=0)
           {
              t[i]=kk;
           }
           /*
           
           */
           int iii=b1.n+1;
           for(int ii=b1.n;ii>=0;ii--)
           {
               if(t[ii]==0)
               {
                  
                   iii=iii-1;
               }
               if(t[ii]!=0)
                   break;
           }
           int *ff=new int[iii];
           for(int jj=0;jj<iii;jj++)
           {
               ff[jj]=t[jj];
           }
           delete []t;
        if(flag==1&&b1.flag==1)
        {
           big B=big(ff,iii,1);
           return B;
        }
           big B=big(ff,iii,0);
           return B;
        }
        
        else
        {
          t=new int[n+1];
          t[n]=0;
          while(i<b1.n)
           {
           tt=b[i]+b1.b[i]+kk;
           t[i]=tt%10000;
           kk=tt/10000;
           i++;
           }
           while(i>=b1.n&&i<n)
           {
           if(kk!=0)
           {
           tt=b[i]+kk;
           t[i]=tt%10000;
           kk=tt/10000;
           i++;
           }
           else
           {
             t[i]=b[i];
             i++;
           }
           }
           if(kk!=0)
           {
              t[i]=kk;
           }
           int iii=n+1;
           for(int ii=n;ii>=0;ii--)
           {
               if(t[ii]==0)
               {
                   
                   iii=iii-1;
               }
               if(t[ii]!=0)
                   break;
           }
           int *ff=new int[iii];
           for(int jj=0;jj<iii;jj++)
           {
               ff[jj]=t[jj];
           }
           delete []t;
         if(flag==1&&b1.flag==1)
        {
           big B=big(ff,iii,1);
           return B;
        }
           big B=big(ff,iii,0);
           return B;
        }
        
    }
    big Abstract(big b1)
    {
        if(flag==2&&b1.flag!=2)
        {
           b1.flag==0?1:0;
           return b1;
        }
        if(flag!=2&&b1.flag==2)
        {
           return *this;
        }
        if(flag==2&&b1.flag==2)
        {
           int *x=new int[1];
           x[0]=0;
           return big(x,1,2);
        }
        if(flag==1&&b1.flag==0)
        {
           big b2=*this;
           b1.flag=1;
           return b1.Add(b2);
        }
        if(flag==0&&b1.flag==1)
        {
            b1.flag=0;
           return Add(b1); 
        }
        int i=0,*t,tt=0,kk=0;
        if(n<b1.n)
        {
        t=new int[b1.n];
        for(int gg=0;gg<b1.n;gg++)
            t[gg]=0;
        while(i<n)
        {
           if(b1.b[i]>=b[i])
           {
              t[i]=b1.b[i]-b[i];
           }
           else
           {
              int j=i+1;
              while(b1.b[j]==0)
              {
                j++;  
              }
              b1.b[j]=b1.b[j]-1;
              for(int w=j-1;w>=i+1;w--)
                  b1.b[w]=9999;
              b1.b[i]=10000+b1.b[i];
              t[i]=b1.b[i]-b[i];
           }
           i++;
        }
        while(i>=n&&i<b1.n)
        {
           t[i]=b1.b[i];
           i++;
        }
        int iii=b1.n;
           for(int ii=b1.n-1;ii>=0;ii--)
           {
               if(t[ii]==0)
               {
                   
                   iii=iii-1;
               }
               if(t[ii]!=0)
                   break;
           }
           int *ff=new int[iii];
           for(int jj=0;jj<iii;jj++)
           {
               ff[jj]=t[jj];
           }
           delete []t;
         if(flag==1&&b1.flag==1)
        {
           big B=big(ff,iii,0);
           return B;
        }
           big B=big(ff,iii,1);
           return B;
        }
        if(n>b1.n)
        {
        t=new int[n];
        for(int gg=0;gg<n;gg++)
            t[gg]=0;
        while(i<b1.n)
        {
           if(b[i]>=b1.b[i])
           {
              t[i]=b[i]-b1.b[i];
           }
           else
           {
              int j=i+1;
              while(b[j]==0)
              {
                j++;  
              }
              b[j]=b[j]-1;
              for(int w=j-1;w>=i+1;w--)
                  b[w]=9999;
              b[i]=10000+b[i];
              t[i]=b[i]-b1.b[i];
           }
           i++;
        }
        while(i>=b1.n&&i<n)
        {
           t[i]=b[i];
           i++;
        }
        int iii=n;
           for(int ii=n-1;ii>=0;ii--)
           {
               if(t[ii]==0)
               {
                   
                   iii=iii-1;
               }
               if(t[ii]!=0)
                   break;
           }
           int *ff=new int[iii];
           for(int jj=0;jj<iii;jj++)
           {
               ff[jj]=t[jj];
           }
           delete []t;
         if(flag==1&&b1.flag==1)
        {
           big B=big(ff,iii,1);
           return B;
        }
           big B=big(ff,iii,0);
           return B;
        }
        if(n==b1.n)
        {
        int flag1=2;
        t=new int[b1.n];
        for(int gg=0;gg<b1.n;gg++)
            t[gg]=0;
        for(gg=b1.n-1;gg>=0;gg--)
        {

             if(b[gg]==b1.b[gg])
                continue;
            if(b[gg]<b1.b[gg])
            {
                flag1=1;
                break;
            }
            if(b[gg]>b1.b[gg])
            {
                flag1=0;
                break;
            }
        }
        while(i<b1.n)
        { 
            if(flag1==0)
            {
               if(b[i]>=b1.b[i])
           {
              t[i]=b[i]-b1.b[i];
           }
           else
           {
              int j=i+1;
              while(b[j]==0)
              {
                j++;  
              }
              b[j]=b[j]-1;
              for(int w=j-1;w>=i+1;w--)
                  b[w]=9999;
              b[i]=10000+b[i];
              t[i]=b[i]-b1.b[i];
           }
            }
            if(flag1==1)
            {
               if(b1.b[i]>=b[i])
           {
              t[i]=b1.b[i]-b[i];
           }
           else
           {
              int j=i+1;
              while(b1.b[j]==0)
              {
                j++;  
              }
              b1.b[j]=b1.b[j]-1;
              for(int w=j-1;w>=i+1;w--)
                  b1.b[w]=9999;
              b1.b[i]=10000+b1.b[i];
              t[i]=b1.b[i]-b[i];
           }
            }
            if(flag1==2)
         {
            int *z=new int[1];
            z[0]=0;
            return big(z,1,2);
         }
           i++;
        }
         if(flag1==0)
         {
             int iii=b1.n;
           for(int ii=b1.n-1;ii>=0;ii--)
           {
               if(t[ii]==0)
               {
                   iii=iii-1;
               }
               if(t[ii]!=0)
                   break;
           }
           int *ff=new int[iii];
           for(int jj=0;jj<iii;jj++)
           {
               ff[jj]=t[jj];
           }
           delete []t;
           if(flag==1&&b1.flag==1)
        {
           big B=big(ff,iii,1);
           return B;
        }
           big B=big(ff,iii,0);
           return B;
         }
         if(flag1==1)
         {
             int iii=b1.n;
           for(int ii=b1.n-1;ii>=0;ii--)
           {
               if(t[ii]==0)
               {
                   iii=iii-1;
               }
               if(t[ii]!=0)
                   break;
           }
           int *ff=new int[iii];
           for(int jj=0;jj<iii;jj++)
           {
               ff[jj]=t[jj];
           }
           delete []t;
           if(flag==1&&b1.flag==1)
        {
           big B=big(ff,iii,0);
           return B;
        }
           big B=big(ff,iii,1);
           return B;
         }
         
        }
        
    }