北理无法通过的隐藏用例QAQ

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

有一个隐藏用例无法通过QAQ

这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如 12 和 5 ,在十进制下它们是不等的,但若 12 使用 3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制, 12 和 5 就可以是相等的。

程序的输入是两个数字 M 和 N( 其十进制的值不超过 1000000000) ,它们的进制在 236 之间。对于十以下的数字,用 09 表示,而十以上的数字,则使用大写的 A~Z 表示。

求出分别在 2~36 哪种进制下 M 和 N 相等。若相等则输出相应的进制,若不等则输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。信息的格式见测试用例。

测试用例 1
12 5↵
输出
12 (base 3) = 5 (base 6)↵

测试用例 2
123 456↵
输出
123 is not equal to 456 in any base 2..36↵

测试用例 3
10 A↵
输出
10 (base 10) = A (base 11)↵

测试用例 4
12 456↵
输出
12 is not equal to 456 in any base 2..36↵

用代码块功能插入代码,请勿粘贴截图
#include <stdio.h>
#include <string.h>
char change(char); 
//有一个隐藏案例没过 

int main() 
{    char aa[11], bb[11];
    int a[11], b[11];
    int len_a, len_b, max_a=0, max_b=0, sum_a, sum_b;
    int i, k, flag=1, t;
    scanf("%s", aa);
    scanf("%s", bb);
    //求长度 
    len_a=strlen(aa);
    len_b=strlen(bb);
    //转换 
    for (i=0; i<len_a; i++)
        a[i]=change(aa[i]);
    for (i=0; i<len_b; i++)
        b[i]=change(bb[i]);
    //求最大进制 
    for (i=0; i<len_a; i++)
        if (a[i]>max_a) max_a=a[i]+1;
    for (i=0; i<len_b; i++)
        if (b[i]>max_b) max_b=b[i]+1;
    //比较 
    for (i=max_a; i<=36&&flag; i++)
    {    flag=1;
        sum_a=0; 
        for (k=0; k<len_a; k++)
            sum_a=sum_a*i+a[k];
        for (k=max_b; k<=36 && flag; k++)
        {    sum_b=0;
            for (t=0; t<len_b; t++)
                sum_b=sum_b*k+b[t];
            if (sum_a==sum_b)
                flag=0;
        }
    }
    if (flag)
        printf("%s is not equal to %s in any base 2..36\n", aa, bb);
    else 
        printf("%s (base %d) = %s (base %d)\n",aa, i-1, bb, k-1);
    return 0;
}

char change(char a)
{    if ('A'<=a && a<='Z')
        a=a-'A'+10;
    else if ('0'<=a && a<='9')
        a=a-'0';
    return a;
}


我的解答思路和尝试过的方法

真的想不出来了QAQ,可以帮我看一下吗