问题描述   输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。

问题遇到的现象和发生背景

问题描述
  输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。

问题相关代码,请勿粘贴截图
//高精度加法
#include <stdio.h>
#define N 100
int Scanner(char T[])
{
    int i=0;
    scanf("%c",&T[i++]);
    while(T[i-1]>='0'&&T[i-1]<='9'){
        scanf("%c",&T[i++]);
    }
    return (i);
}
void px(char x[],int n)
{
    int i = 0;
    for(i;i<n-i;i++){
        char t = x[i];
        x[i] = x[n-i-1];
        x[n-i-1] = t;
    }
}
void Print_String(char max_s[],char min_s[],int max,int min)
{
    int i;
    for(i=0;i<min;i++){
        max_s[i]-=48;
        min_s[i]-=48;
        max_s[i]+=min_s[i];
        if(max_s[i]>9){
            max_s[i]-=10;
            max_s[i+1]+=1;
        }
    }
    if(max_s[i]==1){
        printf("1");
    }
    for(max;max>0;max--){
        if(max_s[max-1]>47){
            printf("%d",max_s[max-1]-48);
        }
        else if(max_s[max-1]<0){
            break;
        }
            else{
        printf("%d",max_s[max-1]);    
        }
    }
}
int main()
{
    char a[N],b[N];
    int a_xb = Scanner(a);
    int b_xb = Scanner(b);
    px(a,a_xb);
    px(b,b_xb);
    if(a_xb<b_xb){
    Print_String(b,a,b_xb,a_xb);    
    }else{
        Print_String(a,b,a_xb,b_xb);
    }
    return 0;
}

运行结果及报错内容

这个是蓝桥杯里 的一个习题,在提交的时候显示错误,请问我这个在哪里还有缺陷,我已经找不到了擦,
在我的输出函数中,最后一个字符为负数,这是为什么,

我的解答思路和尝试过的方法
我想要达到的结果

#include<stdio.h>
#include<string.h>
char c[1002]={0};
int a[1000]={0};
int b[1000]={0};
int sum(int a[],int c1,int b[],int c2){
    int n=0;
    int r=0;
    bool flag = true; 
    
    for(int i=0;i<=c1;i++){
         int d = 0;
         if(i<c2){
             
            d = a[i]+b[i]+r; 
         }else if(i<c1){
             if(r==0){
                 n=c1;
                 c[i]=a[i]+'0';
                 flag=false;
                 //break;
             }else{
                 d=a[i]+r;
             }
                 
         }else if(r>0){
             c[c1]='1';
            n=c1+1;    
            break;
         }
         r=0;
         if(flag){
             if(d>=10){
                 r=1;
                c[i]=(d-10)+'0';
             }else{
                 c[i]=d+'0';
             }             
         }
         
    }    
    return n;
}
int main(){
     int i,c1,z,c2;
     printf("请输入a的值:");
     scanf("%s",c);
     c1=strlen(c);
     for(i=0;i<=c1-1;i++){
        a[c1-1-i]=c[i]-'0'; 
     }
      printf("请输入b的值:");
      scanf("%s",c);
     c2=strlen(c);
     for(i=0;i<=c2-1;i++){
           b[c2-1-i]=c[i]-'0';
     }
     if(c1>=c2){
          z=sum(a,c1,b,c2);
     }else{
          z=sum(b,c2,a,c1);
     }
     for(i=z-1;i>=0;i--)
       printf("%c",c[i]);
    return 0;
}

#include <stdio.h>
#include <string.h>

#define N 1000
int main() {
    char ch1[N],ch2[N];
    scanf("%s %s",ch1,ch2);
    int len1=strlen(ch1),len2=strlen(ch2);
    if(len1==1 && len2==1 && ch1[0]=='0' && ch2[0]=='0') {
        //注意零相加的时候特殊情况
//        cout<<'0';
        printf("0");
        return 0;
    }
    int a[N]= {0},b[N]= {0};
    if(len1>=len2) {
        for(int i=2; i<=len1+1; i++)
            a[i]=ch1[i-2]-'0';
        len1+=2;             //下标从2开始,留出进位空间
        for(int i=0; i<len2; i++)
            b[i]=ch2[len2-i-1]-'0';
        while(len2<len1)   //将两个加数的位数置同
            len2++;
        for(int i=0; i<len1; i++) {    //各位相加;

            a[len1-i-1]+=b[i];
            if(a[len1-i-1]>=10) {        //向前进位
                a[len1-i-1]%=10;
                a[len1-i-2]++;
            }
        }
    } else {
        for(int i=2; i<=len2+1; i++)
            a[i]=ch2[i-2]-'0';
        len2+=2;
        for(int i=0; i<len1; i++)
            b[i]=ch1[len1-i-1]-'0';
        while(len1<len2)   //将两个加数的位数置同
            len1++;
        for(int i=0; i<len2; i++) {    //各位相加;

            a[len2-i-1]+=b[i];
            if(a[len2-i-1]>=10) {        //向前进位
                a[len2-i-1]%=10;
                a[len2-i-2]++;
            }
        }
    }
    int i=0;
    while(1) {            //去除前面不必要的零
        if(a[i]) break;
        else i++;
    }
    for(i; i<len1; i++) //cout<<a[i];
        printf("%d",a[i]);
    return 0;
}

仅供参考,有帮助希望采纳