| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 767 人关注过本帖
标题:判断输入数字在二到十六进制之间是否为回文的程序代码(动态数组)
取消只看楼主 加入收藏
l1206795157
Rank: 1
等 级:新手上路
帖 子:14
专家分:9
注 册:2013-3-17
结帖率:50%
收藏
 问题点数:0 回复次数:1 
判断输入数字在二到十六进制之间是否为回文的程序代码(动态数组)
#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));
    }
}
搜索更多相关主题的帖子: 记录 十六进制 include 动态 
2013-03-20 13:21
l1206795157
Rank: 1
等 级:新手上路
帖 子:14
专家分:9
注 册:2013-3-17
收藏
得分:0 
回复 2楼 wp231957
不好意思,我刚来,还以为这是博客,呵呵

梦断代码
2013-03-20 13:44
快速回复:判断输入数字在二到十六进制之间是否为回文的程序代码(动态数组)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016275 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved