为什么就是过不了测试点呢QAQ
#include<stdio.h>
#include<string.h>
#include<ctype.h>
void niweicunchu(char *n,char *m);
int ishuiwenshu(char *h);
int main(void)
{
char input1[130];
char input2[130];
char M[130];
char ch;
int a,b,c,i,j,k,f;
int N;
scanf("%d",&N);
scanf("%s",input1);
niweicunchu(input1,input2);
if(N<=10)
{
for(k=1;k<=31;k++)
{ if(k!=1)
{
b=strlen(M);
for(i=0,c=0;i<b;i++,c++)
{
input1[i]=M[c];
}
niweicunchu(input1,input2);
}
for(j=0;j<strlen(input1);j++)
{
//将M数组初始化为0,防止上一次循环的影响
for(i=0;i<130;i++)
M[i]='0';
M[j]=(input1[j]+input2[j]-'0')%N;
M[j+1]=(input1[j]+input2[j]-'0')/N;
}
f=ishuiwenshu(M);
if(f)
break;
}
if(k<31)
printf("STEP=%d",k);
else
printf("Impossible!");
}
if(N==16)
{
for(k=1;k<=31;k++)
{
if(k!=1)
{
b=strlen(M);
for(i=0,c=0;i<b;i++,c++)
{
input1[i]=M[c];
}
niweicunchu(input1,input2);
}
for(j=0;j<strlen(input1);j++)
{
//将M数组初始化为0,防止上一次循环的影响
for(i=0;i<130;i++)
M[i]='0';
if(input1[j]>='a'&&input1[j]<='z'||input1[j]>='A'&&input1[j]<='Z')
{
ch=tolower(input1[j]);
switch(ch)
{
case'a':input1[j]='10';
break;
case'b':input1[j]='11';
break;
case'c':input1[j]='12';
break;
case'd':input1[j]='13';
break;
case'e':input1[j]='14';
break;
case'f':input1[j]='15';
break;
default:break;
}
}
if(input2[j]>='a'&&input2[j]<='z'||input2[j]>='A'&&input2[j]<='Z')
{
ch=tolower(input2[j]);
switch(ch)
{
case'a':input2[j]='10';
break;
case'b':input2[j]='11';
break;
case'c':input2[j]='12';
break;
case'd':input2[j]='13';
break;
case'e':input2[j]='14';
break;
case'f':input2[j]='15';
break;
default:break;
}
}
M[j]=(input1[j]+input2[j]-'0')%N;
M[j+1]=(input1[j]+input2[j]-'0')/N;
}
f=ishuiwenshu(M);
if(f)
break;
}
if(k!=31)
printf("STEP=%d",k);
else
printf("Impossible!");
b=strlen(M);
for(i=0,c=0;i<b;i++,c++)
{
input1[i]=M[c];
}
}
return 0;
}
//在结束计算前或得到回文数前,逆位存储数字
void niweicunchu(char* n,char * m)
{
int a,b;
int i;
a=strlen(n);
for(i=0,b=a-1;i<a;i++,b--)
m[i]=n[b];
}
//判断是否是回文数
int ishuiwenshu(char* h)
{
int n,i,j;
n=strlen(h);
for(i=0, j=n-1;i<n;i++,j--)
{
if(h[i]!=h[j])
return 0;
}
return 1;
}