首页 > 代码库 > 写一个函数,对于一个给定的整数,如果它的二进制模式从正向看和反向看是一样的,那么返回true;

写一个函数,对于一个给定的整数,如果它的二进制模式从正向看和反向看是一样的,那么返回true;

写一个函数,对于一个给定的整数,如果它的二进制模式从正向看和反向看是一样的,那么返回true;也就是实现这样一个函数
boolean isPalindrome(int x);

分析一下,该题目主要是通过移位来实现,二进制模式从正向看和反向看是一样的,说明这个二进制数两边是对称的,

画个图看看:

代码如下:

boolean isPalindrome(int x)
{
 int flag = 1,i,j,temp;
    while(1){
        if(num&(0x1<<flag)){
            flag++;
        }else{
            break;
        }
    }
    printf("%dbits\n",flag);
      
    if(flag%2){
        i = flag/2+1;
    }else{
        i = flag/2; 
    }
    for(j=0;j<i;j++){
        temp |= ((num&(1<<j))<<(flag-2*j-1))|((num&(1<<(flag-j-1)))>>(flag-2*j-1));
    }
    if(temp == num){
        return TRUE;
    }else{
        return FALSE;
    }
}