关于#高精度#的问题,如何解决?

#include
#include
using namespace std;
char a[100], b[100];
int A[100], B[100];
int c[101];
int main() {
cin >> a >> b;
int lena = strlen(a);
int lenb = strlen(b);
int len = max(lena, lenb);
int l = len - 1;
if (a[0] == 0 || b[0] == 0) {
cout << 0;
}
else {
for (int i = 0; i < len; i++) {
A[i] = a[len - 1 - i] - 48;
}
for (int i = 0; i < len; i++) {
B[i] = b[len - 1 - i] - 48;
}
for (int lenc = 0; lenc < len; lenc++) {
c[lenc] = A[lenc] + B[lenc];
}
if (c[l] >= 10) {
len++;
}
for (int lenc = 0; lenc < len; lenc++) {
c[lenc + 1] += c[lenc] / 10;
c[lenc] %= 10;
}
for (int i = len - 1; i >= 0; i--) {
cout << c[i];
}
}
}

img


#include<iostream>
#include<cstring>
using namespace std;
char a[100], b[100];
int A[100], B[100];
int c[101];
int main() {
    cin >> a >> b;
    int lena = strlen(a);
    int lenb = strlen(b);
    int len = max(lena, lenb);
    int l = len - 1;
    if (a[0] == 0 || b[0] == 0) {
        cout << 0;
    }
    else {
        //这里的问题,没有把位对齐,最终结果导致长的字符串的最高位和短的字符串中的最高位相减
        //并且char类型数组中未赋值为int类型的0而不是char的'0',-48之后是-48而非期望的0
        /*for (int i = 0; i < len; i++) {
            A[i] = a[len - 1 - i] - 48;
        }
        for (int i = 0; i < len; i++) {
            B[i] = b[len - 1 - i] - 48;
        }*/


        //正确处理,根据每个字符串的长度,从低位开始放到数字数组里面
        for (int i = 0; i < lena; i++) {
            A[i] = a[lena - 1 - i] - 48;
        }
        for (int i = 0; i < lenb; i++) {
            B[i] = b[lenb - 1 - i] - 48;
        }

        for (int lenc = 0; lenc < len; lenc++) {
            c[lenc] = A[lenc] + B[lenc];
        }
        if (c[l] >= 10) {
            len++;
        }
        for (int lenc = 0; lenc < len; lenc++) {
            c[lenc + 1] += c[lenc] / 10;
            c[lenc] %= 10;
        }
        for (int i = len - 1; i >= 0; i--) {
            cout << c[i];
        }
    }
}

img