大神帮看我的关于大整数减法的答案哪里写错了

#include<string.h>
int main()
{
    int i,j=0;
    char ch[256]={};
    char th[256]={};
    char nh[256]={};
    int a[256]={0};
    int b[256]={0};
    int c[256]={0};
    int k=0;
    gets(ch);
    gets(th);
   int len1=strlen(ch);
   int len2=strlen(th);
   if(len1<len2){printf("-");
   strcpy(nh,th);
  strcpy(th,ch);
   strcpy(ch,nh);
   }
    for(i=len1-1;i>=0;i--)
      {
    a[j++]=ch[i]-'0';}
    j=0;
        for(i=len2-1;i>=0;i--)
      {
          b[j++]=th[i]-'0';}
          j=0;
          for(i=0;i<=255;i++)
          {
             if (a[i]-b[i]<0) {if(a[i+1]!=0){a[i+1]--;a[i]=a[i]+10-b[i];}
             else j=i+1;while(ch[j]==0){ch[j]=9;j++;}
             ch[j]--;a[i]=a[i]+10-b[i];}
             else a[i]-=b[i];
          }
          j=0;
          for(i=255;i>=0;i--)
          {
              c[j++]=a[i];
          }
          for(i=0;i<=255;i++)
          {
              if(c[i]!=0) k=1;
            if(k==1) printf("%d",c[i]);}
            if(k==0) printf("0");
     return 0;
}


求两个大的正整数相减的差。
输入
共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
输出
一行,即所求的差。

我的思路是将字符串中的数字逆向赋予数组,然后进行从个位开始进行减法,最后再逆向清零,即得到最终答案

if (a[i]-b[i]<0) {if(a[i+1]!=0){a[i+1]--;a[i]=a[i]+10-b[i];}
             else j=i+1;while(ch[j]==0){ch[j]=9;j++;}
             ch[j]--;a[i]=a[i]+10-b[i];}
             else a[i]-=b[i];
                    问题应该是出在这个混乱的步骤里,这一步我想的是,如果不能减就要一直向前一位借位,但是好像写的不对
                    (如果不用借位的话应该是可以得到正确的答案)
                    希望大神在原有基础上帮我改一下

交换那一步可以增加一个条件,如果ch和th的长度一样并且ch小于th,这样就是大数减小数比较简单,加//的部分是改过的

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

int compare(char a[], char b[]) {//判断a,b大小,a<b返回1
    if (strlen(a) == strlen(b)) {
        int i = 0;
        while (a[i] == b[i]) {
            i++;
        }
        if (i < strlen(a))
            return 1;
        else
            return 0;
    }
    else
        return 0;
}

int main()
{
    int i, j = 0;
    char ch[256];
    char th[256];
    char nh[256];
    int a[256] = { 0 };
    int b[256] = { 0 };
    int c[256] = { 0 };
    int k = 0;
    gets(ch);
    gets(th);
    int len1 = strlen(ch);
    int len2 = strlen(th);

    if (len1 < len2 || compare(ch, th)) {//
        printf("-");
        k = len1;
        len1 = len2;
        len2 = k;
        strcpy(nh, th);
        strcpy(th, ch);
        strcpy(ch, nh);
    }
    for (i = len1 - 1; i >= 0; i--)
    {
        a[j++] = ch[i] - '0';
    }
    j = 0;
    for (i = len2 - 1; i >= 0; i--)
    {
        b[j++] = th[i] - '0';
    }
    j = 0;
    for (i = 0; i < len1; i++)
    {
        if (a[i] - b[i] < 0) {//
            if (a[i + 1] != 0) { 
                a[i + 1]--; 
                a[i] = a[i] + 10 - b[i]; 
            }
            else {
                j = i + 1;
                while (a[j] == 0 && j < len1)
                {
                    a[j] = 9;
                    j++;
                }
                a[j]--;
                a[i] = a[i] + 10 - b[i];
            }
        }
        else
            a[i] -= b[i];
    }
    j = 0;
    for (i = len1-1; i >= 0; i--)//
    {
        c[j++] = a[i];
    }
    for (i = 0; i <= len1-1; i++)//
    {
        if (c[i] != 0) k = 1;
        if (k == 1) printf("%d", c[i]);
    }
    if (k == 0) printf("0");
    return 0;
}

if(len1 strcpy(nh,th);
if (a[i]-b[i] else j=i+1;while(ch[j]==0){ch[j]=9;j++;}

你写的什么东西,用编辑器里面的

代码片

贴正确

图片说明