知识精讲 -- 高精度减法

接下来,我们看看要如何计算一个高精度整数和一个高精度整数的减法操作。首先有一个高精度减法的特殊情况:如果第一个数小于第二个数,我们要怎么去计算它们两个的差呢?我们可以在结果的最前面加上一个负号,并交换这两个数,这样最终结算的结果就和我们期望的一致了。例如,我们要计算 2-5的结果,应该为 -3,那么我们首先写出一个负号,然后计算 5-2 的值并输出。比较两个高精度数大小可以先比较两个数的位数,位数不同时位数少的小,位数相同时可以从最高位开始比较,遇到某一位不同,比较小的就小,此时其实比较的也是两个数本身的字典序,字典序小的就小。这样,我们就可以把问题简化了。现在我们需要解决的是,如何计算两个高精度整数的减法结果,保证前一个数不小于后一个数。
高精度减法
输入两个长度不超过 1000 位的整数 a 和 b,输出 a−b 的差,结果可能为负数。
输入格式
两行,每行一个不超过 1000 位的整数
输出格式
输出 a-b 的差
输入样例
3333333333333333333333333333333333333333
2222222222222222222222222222222222222222
输出样例
1111111111111111111111111111111111111111
我这里不知道为什么错了大家能否帮我看看

#include <bits/stdc++.h>
using namespace std;
int main(){
    string numa,numb;
    int a[1001]={}, b[1001]={}, c[1001]={};
    cin>>numa>>numb;
    int len1 = numa.size();
    int len2 = numb.size();
    int len3 = max(len1, len2);
    if((numa.size() < numb.size()) || (numa.size() == numb.size() && numa < numb)){
        cout<<"-";
        swap(numa,numb);
    }
    for (int i = 1; i <= len1; i++) {
        a[i]=numa[len1-i]-'0';
    }
    for (int i = 1; i <= len2; i++) {
        b[i]=numb[len2-i]-'0';
    }
    for (int i = 1; i <= len3; i++) {
        c[i]=a[i]-b[i];
    }
    for (int i = 1; i <= len3; i++) {
        if(c[i] < 0){
            c[i + 1]--;
            c[i] += 10;
        }
    }
    while (len3 > 1 && c[len3] == 0) {
        len3--;
    }
    for(int i=len3;i>=1;i--){
        cout<<c[i];
    }
    return 0;
}

a, b,c一开始要memset为0
其余部分暂时没看到严重的错误