刚学高精度算法,就遇到问题了= =能帮我看看错在哪里了吗

1168:大整数加法

时间限制: 1000 ms 内存限制: 65536 KB
提交数: 61536 通过数: 20207
【题目描述】

求两个不超过200位的非负整数的和。
【输入】

有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
【输出】

一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
【输入样例】

22222222222222222222
33333333333333333333

【输出样例】

55555555555555555555

#include<bits/stdc++.h>
using namespace std;
int A[210]={0},B[210],C[210];
int main(){
int a1,b1,c1,i;
string a,b;
getline(cin,a);
getline(cin,b);
a1 = a.size();
b1 = b.size();
for (i = 0 ; i < a1 ; i++)            //倒序存入 
A[i]=a[a1-1-i]-'0';
for (i = 0 ; i < b1 ; i++)          //倒序存入
B[i]=b[b1-1-i]-'0';
i=0;
while (i < a1 || i < b1){         //高精度加法 
C[i] += (A[i] + B[i]) % 10;
C[i+1] = (A[i] + B[i]) / 10;
i++;
}
while (C[i] == 0) i--;
for ( ; i >= 0 ; i--)
cout<<C[i];
return 0;
}

我的代码只通过了少量测试仪数据,我看不出来哪里有问题= =

#include<bits/stdc++.h>
using namespace std;
int main(){
    char a1[1001]={},a2[1001]={};
    int b1[1001]={},b2[1001]={},b3[1001]={};  
    cin>>a1>>a2; 
    int len1=strlen(a1); 
    int len2=strlen(a2);
    for(int i=0;i<len1;i++){
        b1[len1-1-i]=a1[i]-'0';
    }
    for(int i=0;i<len2;i++){
        b2[len2-1-i]=a2[i]-'0';
    }
    int lenc=max(len1,len2); 
    int jinwei=0;
    for(int i=0;i<lenc;i++){
        b3[i]=b1[i]+b2[i]+jinwei;
        jinwei=b3[i]/10;
        b3[i]%=10;
    }
    if(jinwei!=0){
        cout<< 1 ;
    }
    for(int i=lenc-1;i>=0;i--){
        cout<< b3[i] ;
    }
 return 0;
}

用用这段代码吧。我学高精度的时候用的就是这个