++

Where is the problem with this function?
I only got 50% of the test cases passed.

Follow

@Acer

>"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.

@Pat

There was a time-limited online assessment. When I submitted this solution, I passed 6 test cases of 12 test cases.

it is C++ clode, C/=2 would be a non-integer result because C is not of doubel type.

Yea, using bitwise operators is better.
the range of A and B is [0,1000000000]

I dont understand the after-the-shift part.

@Acer

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.

@Acer @Pat i believe that, you don't need to do the manual conversion by dividing 2. The numbers ARE binaries in computer and will be nothing else. All you need to do is to count the 1s with some bit operations.

@Acer @Pat

i think this would work …

long long unsigned count(unsigned a, unsigned b){ long long unsigned p = a*b; int count = 0; while(p>0){ count += (p&1); p = p >> 1; } }

@Acer

Also, yes, the test would come before the shift, unless you were testing the carry flag, but I don't think C can do that.

Sign in to participate in the conversation
Qoto Mastodon

QOTO: Question Others to Teach Ourselves
An inclusive, Academic Freedom, instance
All cultures welcome.
Hate speech and harassment strictly forbidden.