1

我想有效地找出哪些抽屉是满的。但输出必须是对应于二进制表示的数字。例如,如果只有第二个 Drawer 已满(从左到右),则输出为 4:

8 4 2 1

0 1 0 0(二号抽屉已满)

所以我使用了这种方法。

int DrawersFull[4] = {0,0,0,0}; //Initially all are empty

for(i=0;i<4;i++)
{

    if(IsDrawerFull) // the api was provided by the interviewer
      DrawerFull[i]=1;
}

我不确定如何生成输出。任何建议都会有所帮助。谢谢。面试官给我暗示可以使用按位运算符来完成,但我不确定。

4

2 回答 2

0

这与将二进制数转换为十进制数相同。试试这个:

int res = 0;
for (i = 4; i >= 1; i--) {
    res = res * 2 + DrawerFull[i]; // Assuming DrawerFull will contain only 1 or 0.
}
于 2013-10-24T20:40:42.667 回答
0
char fullDrawers = 0;
for( char i = 0; i < 4; ++i )
{
    if( IsDrawerFull )
        fullDrawers &= 1;
    fullDrawers <<= 1;
}
于 2013-10-24T20:48:27.560 回答