51nod 1005 大数加法

#include<iostream>
#include<string>
using namespace std;
#define MAXN 10001
int a[MAXN]={0},b[MAXN]={0};
bool init(int a[]) 
{ 
  int i;
  string s; 
  cin>>s;
  a[0]=s.length();
  if(s[0]=='-')
  {
    //a[0]--;
    for(i=1;i<=a[0];i++)
        a[i]=s[a[0]-i]-'0';
    a[a[0]]=0;
    a[0]--;
    return false;
  }
  else
  {
    for(i=1;i<=a[0];i++)
      a[i]=s[a[0]-i]-'0';
    return true;
  }
}
void print(int a[])  
{
  int i;
  if (a[0]==0){cout<<0<<endl;return;}
  for(i=a[0];i>0;i--) cout<<a[i];
  cout<<endl;
  return ;
}
void  jia(int a[],int b[]) 
{ int i,k; 
  if(a[0]<b[0])a[0]=b[0];    
  for(i=1;i<=a[0];i++) a[i]+=b[i];   
  for(i=1;i<=a[0];i++)
    { 
      a[i+1]+=a[i]/10;
      a[i]%=10;
    } 
  if(a[a[0]+1]>0) a[0]++;
}
int compare (int a[],int b[]) 
{ int i; 
  if (a[0]>b[0]) return 1;//a的位数大于b则a比b大 
  if (a[0]<b[0]) return -1;//a的位数小于b则a比b小 
  for(i=a[0];i>0;i--)  //从高位到低位比较 
     { if (a[i]>b[i]) return 1; 
       if (a[i]<b[i]) return -1;
     } 
  return 0;//各位都相等则两数相等。 
} 

int jian(int a[],int b[])//计算a=a-b
{ 
  int flag,i; 
  flag=compare(a,b); //调用比较函数判断大小 
  if (flag==0) {a[0]=0;return 1;} //相等 
  if(flag==1) //大于   
    {
        for(i=1;i<=a[0];i++) 
       {
           if(a[i]<b[i]){ a[i+1]--;a[i]+=10;} //若不够减则向上借一位 
        a[i]=a[i]-b[i];
       } 
     while(a[a[0]]==0) a[0]--; //修正a的位数 
     return 1;
    } 
  if (flag==-1)//小于  则用a=b-a,返回-1 
   { 
     for(i=1;i<=b[0];i++)
      {if(b[i]<a[i]){b[i+1]--;b[i]+=10;} //若不够减则向上借一位 
       a[i]=b[i]-a[i];
      } 
     a[0]=b[0]; 
     while(a[a[0]]==0) a[0]--; //修正a的位数 
     return -1;
   } 
}
int main()
{
  bool signa=false,signb=false;
  signa = init(a);
  signb = init(b);
  if(signa&&signb)
  {
      jia(a,b);
      print(a);
  }
  else if(!signa&&!signb)
  {
      jia(a,b);
      printf("-");
      print(a);
  }
  else
  {
     if(jian(a,b)==1)
     {
         if(!signa&&a[0])
             cout<<'-';
     }
     else
     {
         if(!signb&&a[0])
             cout<<'-';
     }
     print(a);
  }
  return 0;
}

大数加法

原文地址:https://www.cnblogs.com/joeylee97/p/6135241.html