Actually, it doesn't do what the requester asked even when x is a power of 
2, because, e.g., the output for n = 6 and x = 2 is 6, but according to the 
examples provided, the output should be 8, the next higher multiple of 2. 
You could use (n + x) & ~(x-1) or (n + x) & (-x) for the x = power of two 
case.
For general x > 0, the following algorithm is O(log n):
int nextLargerMultiple(int n, int x)
{
     int r = n, d = x;
     while( r <= d ) d <<= 1;
     while( d != x )
     {
         d >>= 1;
         if( r >= d ) r -= d;
     }
     return n - r + x;
}
Think long division, as you learned to do it with paper and pencil. The 
first while loop shifts x left enough that the result is > n. The second 
while loop  successively shifts x right one place and if 
possible subtracts it from n. At the end of the second while loop r is the 
remainder; n%x. Subtracting r from n gives the n rounded down to a multiple 
of x, and then adding x gives the next larger multiple of x.
 
Dave

On Thursday, September 13, 2012 9:03:49 AM UTC-5, bharat wrote:
>
> the above code works only for 2,4,8,16 ...
>
> On Thu, Sep 13, 2012 at 7:13 PM, VIHARRI P L V 
> <[email protected]<javascript:>
> > wrote:
>
>> Let me give an example. 
>>             
>>           For 17 next multiple of number 5 is 20.
>>           For 20 next multiple of number 5 is 25.
>>
>> And give solution for this proeblem also:
>>  
>>           For 17 next nearest multiple of number 5 is 20.
>>           For 20 next nearest multiple of number 5 is 20.
>>
>> *VIHARRI P L V*
>>
>>
>>
>>
>> On Thu, Sep 13, 2012 at 7:09 PM, bharat b 
>> <[email protected]<javascript:>
>> > wrote:
>>
>>> @vihari: what is n?
>>>
>>> On Thu, Sep 13, 2012 at 6:32 PM, VIHARRI <[email protected]<javascript:>
>>> > wrote:
>>>
>>>> hey for finding next multiple of a number x using bitwise : ( n + x -1 
>>>> ) & ~(x-1) but not working for all numbers 
>>>> Could some one please explain me. 
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Algorithm Geeks" group.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msg/algogeeks/-/7C_Nw4RoxmEJ.
>>>> To post to this group, send email to [email protected]<javascript:>
>>>> .
>>>> To unsubscribe from this group, send email to 
>>>> [email protected] <javascript:>.
>>>> For more options, visit this group at 
>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>
>>>
>>>  -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "Algorithm Geeks" group.
>>> To post to this group, send email to [email protected]<javascript:>
>>> .
>>> To unsubscribe from this group, send email to 
>>> [email protected] <javascript:>.
>>> For more options, visit this group at 
>>> http://groups.google.com/group/algogeeks?hl=en.
>>>
>>
>>  -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Algorithm Geeks" group.
>> To post to this group, send email to [email protected]<javascript:>
>> .
>> To unsubscribe from this group, send email to 
>> [email protected] <javascript:>.
>> For more options, visit this group at 
>> http://groups.google.com/group/algogeeks?hl=en.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/algogeeks/-/e0LIWXHAQjMJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to