#include <stdio.h>
#include <stdlib.h>
int *num;
int *base;
int *basenum;
int court;
void main(){
int *pflag;
int flag;
int n,i,j=0,k;
base=(int*)malloc((j+1)*15*sizeof(int)); //记录每个数字各进制是否为回文的标记符
pflag=(int *)malloc((j+1)*sizeof(int)); //记录各数字是否为回文的标记符
num=(int *)malloc(sizeof(int)); //储存从键盘输入的数字
printf("sample input\n");
scanf("%d",num);
while(*(num+j)!=0) //输入的数字以0结束
{ j++;
for(k=0;k<15;k++) //各进制依次判断
{ flag=0; //每次判断后标记符初始化,以免影响下次判断
court=0;
n=*(num+j-1);
while(n!=0) //输入的数字向各进制转化
{ basenum=(int*)realloc(basenum,(court+1)*sizeof(int));
*(basenum+court)=n%(k+2);
n=n/(k+2);
court++;
}
if(court<=2)
flag=1;
for(i=0;i<(court-1);i++) //判断是否为回文
{ if(*(basenum+i)!=*(basenum+court-1-i))
{ flag=1;
break;
}
}
if(!flag)
{ //若是回文,则标记符赋值为1
*(pflag+j-1)=1;
*((base+(j-1)*15)+k)=1;
}
else
{ if( *(pflag+j-1)!=1) //否则为0
*(pflag+j-1)=0;
*((base+(j-1)*15)+k)=0;
}
}
base=(int*)realloc(base,((j+1)*15)*sizeof(int));
pflag=(int *)realloc(pflag,(j+1)*sizeof(int));
num=(int *)realloc(num,(j+1)*sizeof(int));
scanf("%d",(num+j));
}
for(i=0;i<j;i++) //输出部分
{ if( *(pflag+i)) //若数字为回文
{
printf("the number %d is plaindrom in the base of ",*(num+i));//则输出
for(k=0;k<15;k++)
if(*((base+i*15)+k))//若数字在k+2进制中为回文
printf("%d ",k+2);//则输出
printf(".\n");
}
else
printf("the number %d is not plaindrom in all base!\n",*(num+i));
}
}