Блог пользователя Mohsina_Shaikh

Автор Mohsina_Shaikh, история, 20 месяцев назад, По-английски

Is finding rightmost set bit by this approach wrong.

int ans=xorsum,int rightmost=0;
 while(ans){
            int mask=1<<i;
            if(ans&mask){
                break;
            }
            ans=ans>>1; 
            i++;
        }
   rightmost=1<<i;

My code gave WA for some test cases when I used this code snippet to find rightmost set bit.It worked when I removed this with rightmost=xorsum&(-xorsum) can anyone please why the above got snippet may not work.

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
20 месяцев назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

Why are you both left shifting the mask AND right shifting the number in which you're searching? "ans = ans >> 1" is the problem here; delete it and you should have no more problems.

»
20 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

You should remove ans=ans>>1;, the i++ and 1<<i already move you to the left so there's no need to move ans to the right. if ans==48 you get 4 when the answer is 16