首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

问个面试题,有些不明白

2013-08-20 
问个面试题,有点不明白把一个unsigned char的数按照各位逆序,生成一个数,用最小的时间复杂度算出,强调算法

问个面试题,有点不明白
把一个unsigned char的数按照各位逆序,生成一个数,用最小的时间复杂度算出,强调算法复杂度最小


引用:
//十进制位:O(1)
unsigned char reserve_dec( unsigned char value )
{
    return (value / 100) + ( value / 10 % 10 * 10 ) + (value % 10 * 100);
}

//十六进制:O(1)
unsigned char reserve_hex( unsigned char value)
{
    return (value << 4) & (value >> 4);
}

//二进制:O(1)
unsigned char reserve_bin( unsigend char value )
{
    static unsigned char rchars[] = "\0\x08\x04\x0c\x02\x0a\x06\x0e\x01\x09\x05\x0d\x03\x0b\x07\x0f";
    return rchars[value >> 4] 
[解决办法]
 ( rchars[value & 0x0F] << 4 );
}

------解决方案--------------------


不知可否?

unsigned char getval(unsigned char uc)
{
if(uc==0)return uc;
unsigned char rtn = 0;
for(int i=0;i<8;i++)
{
rtn=((rtn+((uc>>i)&1))<<(i<7?1:0));
}
return rtn;
}

热点排行