判断输入数字在二到十六进制之间是否为回文的程序(动态数组)

作者在 2013-03-20 13:41:25 发布以下内容

#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));
 }
}

默认分类 | 阅读 794 次
文章评论,共0条
游客请输入验证码
文章分类
文章归档
最新评论