求大家帮小弟我看看13整除的代码错哪了

求大家帮我看看13整除的代码哪里错了
给定一个正整数n,判定n能否被13整除。
输入数据的第一行是一个整数T,(T<20)。接着有T行,每行上有一个用字符串表示的正整数n(长度不超过80),对应一种情形。
对于每一种情形,如果n被13整除,那么输出“Yes”,否则输出“No” 
Sample Input
2
91
1234567

Sample Output
Yes
No

代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{
    char a[1000];
    int i,j,l,n;
    scanf("%d",&n);
getchar();
    while(n--) 
    {
char b[1000]={0},c[1000]={0};
double s;
    gets(a); 
    l=strlen(a);
if(i<=3)
s=atoi(a);
else
{for(i=0;i<l-3;i++)
b[i]=a[i];
b[i+1]='\0';
for(j=0;i<l;i++)
    c[j]=a[i];
c[i+1]='\0';
s=abs(atoi(b)-atoi(c));
}
    if((int)s%13==0) printf("Yes\n");
    else printf("No\n");
    }
return 0;
}
我自己测试的长数组都是对的啊可是还是传到网上还是WA 

------解决思路----------------------
if(i/*这应该是l吧*/<=3)

------解决思路----------------------
for(i=0;i<l-3;i++)
b[i]=a[i];
b[i+1]='\0';
for(j=0;i<l;i++)
    c[j]=a[i];
c[i+1]='\0';

首先i+1都改i。其次你l=80的时候l-3是77,这itoa不是一样会爆?
------解决思路----------------------
s=abs(atoi(b)-atoi(c));  这里的b只比a短3位而已,a最长到80的情况下b同样也是超出了atoi的范围。
我随便写了一段,不知道对不对,我自己试了一些数好像还行:
128396511965064616  // Yes
128396511965064613  // No
16049382683950649382683945  // Yes
16049382683950649382683946  // No
#include<stdio.h>
int main()
{
    char a[128];
    int T, s;
    char *p;
    scanf("%d",&T);
    while(T-- > 0)
    {
        s = 0;
        scanf("%s", a);
        for (p = a; *p != '\0'; p++)
        {
            s = (*p - '0' + s * 10) % 13;
        }
        if(s%13==0) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}


------解决思路----------------------
数据这么大,必须用大数才行啊
------解决思路----------------------
引用:
s=abs(atoi(b)-atoi(c));  这里的b只比a短3位而已,a最长到80的情况下b同样也是超出了atoi的范围。
我随便写了一段,不知道对不对,我自己试了一些数好像还行:
128396511965064616  // Yes
128396511965064613  // No
16049382683950649382683945  // Yes
16049382683950649382683946  // No
#include<stdio.h>
int main()
{
    char a[128];
    int T, s;
    char *p;
    scanf("%d",&T);
    while(T-- > 0)
    {
        s = 0;
        scanf("%s", a);
        for (p = a; *p != '\0'; p++)
        {
            s = (*p - '0' + s * 10) % 13;
        }
        if(s%13==0) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}


可行,这题目就是要求用字符串操作来处理运算操作,不能转换成数字(会内存溢出的)来操作,
------解决思路----------------------
仅供参考
#include <iostream>
#include <string>
using namespace std;
inline int compare(string str1,string str2) {//相等返回0,大于返回1,小于返回-1
         if (str1.size()>str2.size()) return 1; //长度长的整数大于长度小的整数
    else if (str1.size()<str2.size()) return -1;
    else                              return str1.compare(str2); //若长度相等,则头到尾按位比较
}
string SUB_INT(string str1,string str2);
string ADD_INT(string str1,string str2) {//高精度加法
    int sign=1; //sign 为符号位
    string str;
    if (str1[0]=='-') {
        if (str2[0]=='-') {