读书人

问个面试题有些不明白

发布时间: 2013-08-20 17:47:51 作者: rapoo

问个面试题,有点不明白
把一个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;
}

读书人网 >C语言

热点推荐