Dear all,

I have been having trouble with this code . This program is supposed to brute-force verbal arithmetic, but when it is testing large numbers, the values in array x1 screw up badly. They become negative and I have given up. Could anyone please tell me what's wrong? This same error came up in another program I tried to write.

Code:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int pows(int a,int b)
{
    int p=1;
    for(;b>0;b--)
    {
        p*=a;
    }
    return p;
}

int check(int data[],int dataCheck[],int k)
{
    int i;
    int flag=1;
    for(i=0;i<k;i++)
    {
        if(data[i]!=dataCheck[i])
        {
            flag=0;
            break;
        }
    }
    return flag;
}
int sortNum(int x1[],int x)
{
    int i,j;
    int y=x;
    for(i=0;x!=0;i++)
    {
        x/=10;
    }
    x1[i]=10;
    x1[i+1]=10;
    j=i;
    for(i--;i>=0;i--)
    {
        x1[i]=y%10;

        y/=10;
    }



    return j;
}
int main()
{
  char a[30],b[30],c[30];
  char x[30];
  int x1[30];
  int aNum,bNum,cNum;
  int data[60]={0},dataCheck[59]={0};
  int aLen,bLen,cLen;
  int cLent,cNumt;
  int xLen;
  int i,j,m,k=0,k1=0;


  fgets(a,10,stdin);
  fgets(b,10,stdin);
  fgets(c,11,stdin);


  aLen=strlen(a);
  bLen=strlen(b);
  cLen=strlen(c);

  a[aLen-1]='\0';
  b[bLen-1]='\0';

  strcpy(x,a);
  strcat(x,b);
  strcat(x,c);

  for(i=0;x[i]!='\n';i++)
  {
      for(j=i+1;x[j]!='\n';j++)
      {
          if(x[i]==x[j])
          {
              data[k]=i;
              data[k+1]=j;
              k+=2;
              break;
          }
      }

  }

  for(m=0;m<pows(10,aLen+bLen-2);m++)
  {
      aNum=m%(pows(10,aLen-1));
      bNum=(m-aNum)/pows(10,aLen-1);
      cNum=aNum+bNum;
      cNumt=cNum;
      for(cLent=0;cNumt!=0;cLent++)
      {
          cNumt/=10;
      }
      xLen=sortNum(x1,(aNum*pows(10,bLen+cLent-1)+bNum*pows(10,cLent)+cNum));

      if(xLen!=aLen+bLen+cLen-3)
      {
          continue;
      }
      for(i=0,k1=0;i<xLen;i++)
      {
          for(j=i+1;j<xLen;j++)
          {
              if(x1[j]==x1[i])
              {
                  dataCheck[k1]=i;
                  dataCheck[k1+1]=j;
                  k1+=2;
                  break;
              }
          }

      }

      if(k!=k1)
      {
          continue;
      }
       

      if(check(data,dataCheck,k)==1)
      {
          
          printf("%d+%d=%d\n",aNum,bNum,cNum);
      }
     

  }
  return 0;
}