关于 回文数和进制的问题

为什么前几个测试点过不了吗大家,麻烦帮我看一下,语法方面是没有错误的应该

img

#include
#include
#include
int ishuiwenshu(char*ch);
int main(void)
{//M[]即是我们读入的数组,第一次输入最大的位数是100,每次加法后最多往前进一位,最多30次,为了防止溢出,就把数组的大小放大了一点 
    char M[135];
    //M[]则用于存储每次加法后得到的新数字字符串 
    char subM[135];
    int N,i,k,n;
    
    scanf("%d",&N);
    scanf("%s",M);
    
    n=strlen(M);
    //输入的数字可能是16进制的,所以输入的可能会有字母,当遍历数组时,其ASCII码大于‘9’的时候,就是字母,为了方便,用tolower()都变成小写 
    for(i=0;iif(N=16&&M[i]>'9')
            {
                //处理输入的字母,转换成数字 
                M[i]=tolower(M[i]);
                M[i]=M[i]-'a'+10;
            }
    }
    //开始3最多的0次判断与加法 
    for(k=0;k<=30;k++)
    { 
        //第一次进入该循环时,并不用subM[]数组来处理,但在加法过一次之后,为了要把上一次得到的subM[]的值赋给M[],然后再继续下面的加法 
        if(k>0)
        {   
            n=strlen(subM);
            for(i=0;i//在每一次开始加法前,先判断是否是回文数,如果是,跳出循环,然后printf(); 
        if(ishuiwenshu(M))
        break;
        n=strlen(M);
        for(i=0;M[i]//用subM[]来存储得到的新数字字符串 
            subM[i]=M[i]+M[n-1-i];
            //处理进位问题 
            if(subM[i]>=N)
            {
                subM[i]=subM[i]%N;
                subM[i+1]=subM[i]/N;
            }
            
        }
    
    }
    //因为当k=31时,也会跳出循环,所以需要判断是否是要输出STEP 
    if(k>30)
    printf("Impossible!");
    else
    printf("STEP=%d",k);
    
}
//回文数判断的函数 
int ishuiwenshu(char*ch)
{
    int i,j;
    i=0;
    j=strlen(ch);
    for(i=0;i<=(j/2);i++)
    {
        if(ch[i]!=ch[j-1-i])
        return 0;
    }
    return 1;
}


#include <bits/stdc++.h> 
using namespace std;
int n, q[1000001], l, w[1000001], ans;
string s;
void init() 
{
    int j = 0;
    for(int i = s.length() - 1; i >= 0 ; i--) 
    {
        if(s[i] >= '0' && s[i] <= '9') 
        {
            q[++j] = s[i] - '0';
        }
        else 
        {
            q[++j] = s[i] - 'A' + 10;
        } 
    }
}
void add(int a[], int b[]) 
{
    for(int i = 1; i <= l; i++)
    {
        a[i] += b[i];
        a[i + 1] += a[i] / n; 
        a[i] %= n;
    }
    if(a[l + 1] > 0) 
    {
        l++; 
    }
}
bool f(int a[]) 
{
    int ln = l;
    int i = 1;
    int j = l;
    while(ln--)
    {
        if(ln < l / 2) 
        {
            break;
        }
        if(a[i] != a[j])
        {
            return false; 
        }
        i++;
        j--;
    }
    return true;
}
void turn(int a[]) 
{
    int j = 0;
    for(int i = l; i >= 1; i--) 
    {
        w[++j] = a[i]; 
    }
}
int main()
{
    cin>>n>>s;
    init(); 
    l = s.length();
    while(!f(q)) 
    {
        turn(q);
        add(q, w); 
        ans++;
        if(ans > 30) 
        {
            break;
        }
    }
    if(ans > 30)
    {
        printf("Impossible!"); 
    }
    else
    {
        printf("STEP=%d", ans);
    }
    return 0;
}