二进制回文数

小L比较喜欢研究奇妙的数字,有一天他发现了一类特殊的数,他将这些数命名为“小L数”。 
“小L数”的定义:数字的二进制是一个回文数。
比如:
1    (1)2
3    (11) 2
5    (101)2
现在给出一个数字N,请判断他是不是小L数。 

输入

输入为多组数据
输入的数字N<=1023 

输出

对于每一个N,若N是小L数,则输出"Yes",否则输出"No"。 

样例输入 1 2 3

样例输出

yes
no
yes
#include <stdio.h>
#include <math.h>
int main()
{
    int b,i,j,c,m;
    double sum;
    int a[20];
    while(scanf("%d",&b)!=EOF)
    {
        m=b;
        c=0;
        sum=0;
        while(b!=0)//算出转化成二进制的数
        {
            i=b%2;
            a[c]=i;
            c++;
            b=b/2;
        }
        c--;
        for(j=0;j<=c;j++)//二进制本就是倒着输出的,在这里可以直接进行回文数判断
        {
            sum=sum+a[j]*pow(2,c-j);
        }
        if(sum-m==0)//判断回文数转换成十进制以后和原数比较
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}


 

猜你喜欢

转载自blog.csdn.net/acm147258369/article/details/84111670