6. Give a one-line C expression to test whether a number is a power of 2. [No loops
allowed - it's a simple test.]
个人觉得很妙的一个题~
if( x == 0 || !( x & x-1 ))
7. Given an array of characters which form a sentence of words, give an efficient
algorithm to reverse the order of the words (not characters) in it.
实现的算法有很多,但是占用空间比较大,这个算法不需要额外的0(n)的空间
void reverse( char c[], int begin, int end )
{
char temp;
int j = ( end - begin + 1 ) / 2;
for ( int i = 0; i < j ; i ++ )
{
temp = c[ begin + i ];
c[ begin + i ] = c[ end - i ];
c[ end - i ] = temp;
}
}
void reverseStr( char c[] )
{
int begin, end, length;
length = strlen( c );
begin = 0;
end = length - 1;
reverse( c, begin, end );
end = 0;
while( end < length + 1 )
{
if( c[ end ] == ' ' || c[ end ] == '/0' )
{
reverse( c, begin, end - 1 );
begin = end + 1;
}
end ++;
}
}
9. Give a very good method to count the number of ones in a "n" (e.g. 32) bit
number.
程序整理如下
int x, n ;
n = 0;
x = 127;
while( x )
{
n += ( x & 0x1 );
x >>= 1;
}
cout << n;