注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

回文数问题  

2014-11-03 09:49:12|  分类: C & C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
问题是这样的:如果一个数从左边读和从右边读一样,那么我们说这是一个回文数。例如,75457是一个回文数。当然,数的这个特性还依赖于表示它的进制。如果用十进制表示17,它不是回文数;但是如果用二进制(10001)表示它,它就是一个回文数。本题的目标是,输入一个十进制整数n和它的目标进制d,判断整数n在d进制下是否为回文数。
第一行输入一个数T表示有T组测试数据。接下来的T行,每行两个数,分别是整数n和进制d,d范围是2到16。若是回文数,则输出"Number 'n' is palindromein basis 'd'"(不包括引号),若不是回文数,则输出"Number 'n' is not palindrome in basis 'd'"(不包括引号)。
#include <stdio.h>
#include <stdlib.h>

void CheckData(int n,int d)
{
    int m=n,t=0,i;//这个是数组需要的位数,
    //一个数用d进制表示的时候所需要的位数是d^t<d^(t+1)
    char Bits[]="0123456789ABCDEF";//每一位的表示
    while(m>0)
    {
        t++;
        m/=d;
    }
    //分配内存
    char* p=(char*)malloc((t+1)*sizeof(char));
    if(p==NULL)
    {
        printf("Memory allocation failed.\n");
        return;
    }
    m=n;
    t=0;
    while(m>0)
    {
        *(p+t)=Bits[m%d];
        m=m/d;
        t++;
    }
    *(p+t)='\0';
    for(i=0;i<t/2;i++)
    {
        if(*(p+i)!=*(p+t-i-1))
        {
            printf("Number %d is not palindrome in basis %d",n,d);
            free(p);
            return;
        }
    }
    printf("Number %d is palindrome in basis %d",n,d);
    free(p);
}

int main()
{
    int i,T,n,d;
    printf("输入T:\t");
    scanf("%d",&T);
    for (i =0;i<T;i++)
    {
        printf("输入整数n和进制数d:\t");
        scanf("%d%d",&n,&d);
        CheckData(n,d);
        printf("\n");
    }
    return 0;
}

  评论这张
 
阅读(324)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016