大数加法

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
char str1[10000002],str2[10000002],result[10000010];
short add[10000000];
void bignumadd(char str1[],char str2[],char result[])
{
     long   k=0,i,j;
     long  leng1 = strlen(str1);
     long  leng2 = strlen(str2);
     memset(add,0,sizeof(add));
     for(i=leng1-1,j=leng2-1;i>=0&&j>=0;i--,j--) //做加法操作
     {
        add[k++] = (str1[i]-'0')+(str2[j]-'0');
     }
      if(leng1>leng2)
      {
           for(j=i;j>=0;j--)
           add[k++] = str1[j]-'0';
      }
      else
      {
           for(i=j;i>=0;i--)
          add[k++] = str2[i]-'0';
      }
      for(i=0;i<k;i++)//该进位的进位
      {
           if(add[i]>=10)
           {
                add[i+1] += (add[i]/10);
                add[i]%=10;
           }
      }
      long long l=0;
      if(add[k]>0)//最高位产生了进位
      {
           for(i=k;i>=0;i--)
           {
                result[l++] = add[i]+'0';
           }
      }
      else
      {
           for(i=k-1;i>=0;i--)
           {
                result[l++] = add[i]+'0';
           }
      }
     result[l]='\0';
}
int main()
{
     scanf("%s%s",str1,str2);
     bignumadd(str1,str2,result);
     printf("%s\n",result);
    return 0;
}

你可能感兴趣的:(大数加法)