请问一下为什么输出结果会出现前两位不对的情况?

要求多组输入
给定 2 个正整数 a,b ,a 和 b 最多可能有 40 位,求出 a +b 的和。
我的输出结果
33333333333333333333333333
22222222222222222222222222
22555555555555555555555555

#include<iostream>
#include<cstring>
using namespace std;
int main(){
    char s1[50],s2[50];
    int a[50]={0},b[50]={0},l1,l2,c,k,i;
while(cin>>s1[50]>>s2[50]){
    gets(s1);
    gets(s2);
    l1=strlen(s1);
    l2=strlen(s2);
    if(l1<l2) k=l2;
    else k=l1;c=k;
    for(i=0;i<l1;k--,i++)
    a[k]=s1[l1-1-i]-'0';
    for(k=c,i=0;i<l2;k--,i++)
    b[k]=s2[l2-1-i]-'0';
    for(i=c;i>=0;i--){
        a[i]+=b[i];
        if(a[i]>=10){
            a[i]=10;
            a[i-1]++;
        }
    }
    if(a[0]!=0){
        for(i=0;i<=c;i++)
        cout<<a[i];
    }else{
        for(i=1;i<=c;i++)
        cout<<a[i];
    }
}
}
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main(){
    char s1[50],s2[50];
    int a[50]={0},b[50]={0},l1,l2,c,k,i;
    while(1){
        gets(s1);
        gets(s2);
        l1=strlen(s1);
        l2=strlen(s2);
        if(l1<l2) k=l2;
        else k=l1;c=k;
        for(i=0;i<l1;k--,i++)
            a[k]=s1[l1-1-i]-'0';
        for(k=c,i=0;i<l2;k--,i++)
            b[k]=s2[l2-1-i]-'0';
        for(i=c;i>=0;i--){
            a[i]+=b[i];
            if(a[i]>=10){
                a[i]=10;
                a[i-1]++;
            }
        }
        if(a[0]!=0){
            for(i=0;i<=c;i++)
                cout<<a[i];
        }else{
            for(i=1;i<=c;i++)
                cout<<a[i];
        }
        //这里可以换成别的逻辑,具体看你的题目怎么要求
        string s;
        cout << endl << "1=continue 2=exit";
        cin >> s;
        if (s == "2") break;
        fflush(stdin);
    }
}

这不就是个高精度模板吗

#include <bits/stdc++.h>
using namespace std;
int a[201], b[201], c[202];
int main ()
{
    string s1, s2;
    cin>>s1;
    cin>>s2;
    int len1=s1.size();
    int len2=s2.size();
    int len=max(len1,len2);
    for(int i=0;i<len1;i++)
        a[i]=s1[len1-i-1]-'0';
    for(int i=0;i<len2;i++)
        b[i]=s2[len2-i-1]-'0';
    for(int i=0;i<len;i++)
    {
        c[i]=c[i]+a[i]+b[i];
        c[i+1]=c[i]/10;
        c[i]=c[i]%10;
    }
    if(c[len]) len++;
    for(int i=len-1;i>=0;i--)
        cout<<c[i];
    return 0;
}