>"I only got 50% of the test cases passed."
Does this mean that 50% produced an error, or that 50% produced the wrong result?
Just looking at it without actually testing it myself, I suspect the problem is in the divide by 2, (C/=2;) which would be a non-integer result about 50% of the time.
Perhaps a better way is to use bitwise operators. Use bitwise shift left (<<) and then test if it is greater than 2^(n-1). (where n=number of bits). Or optionally, after the shift do a logical AND (&) with a mask that has the highest bit set, then compare, etc.
For example, after the shift left, if you want to test the MSB (most-significant bit) of an 8-bit result that looks like this:
10011000
You could do a logical AND with a mask that looks like this:
10000000 , which is 2^(8-1)
The result is zero if the MSB is zero.
There may be a specific C++ operation that can directly check the MSB without using the mask, but I don't remember if there is or not.
Note: The 2^(n-1) allows for an arbitrary number of bits, but you'd probably know that already in advance and could just use a constant.