1.位数的确定:假设c用来保存大数据a与大数据b的和,那么c的长度len= max(lena,lenb) + 1

2.进位处理:

c[i] = a[i] + b[i]+jw;(jw为每轮进的位)
      jw = c[i]/10;
      c[i] = c[i]%10;

3.删除前导0

for(int i=len-1;i>=0;i--){
if(c[i]==0&&len>1)
len--;
else
break;
}

源码

#include <stdio.h>
#include <string.h>
#define Max 3000
void plus(char s1[],char s2[]);
int max(int a,int b);
int main()
{
char s1[Max];
char s2[Max];
scanf("%s %s",s1,s2);
plus(s1,s2);
}
void plus(char s1[],char s2[]){
int a[Max];
int b[Max];
int c[Max];
int lena=strlen(s1);
for(int i=0;i<lena;i++)
a[i]=s1[lena-i-1]-'0';
int lenb=strlen(s2);
for(int i=0;i<lenb;i++)
b[i]=s2[lenb-i-1]-'0';
int len=max(lena,lenb)+1;
int jw=0;
for(int i=0;i<len;i++){
c[i]=a[i]+b[i]+jw;
jw=c[i]/10;
c[i]%=10;
}
for(int i=len-1;i>=0;i--){
if(c[i]==0&&len>1)
len--;
else
break;
}
for(int i=len-1;i>=0;i--)
printf("%d",c[i]);
}
int max(int a,int b){
if(a>b)
return a;
else
return b;
}

以上代码仅供参考