Advertisement
Filkolev

Change Even Bits - optimized

Jul 27th, 2014
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2.  
  3. class ChangeEvenBits
  4. {
  5.     static void Main()
  6.     {
  7.         int numberOfInputs = int.Parse(Console.ReadLine());
  8.  
  9.         int biggestNumber = Int32.MinValue;
  10.  
  11.         for (int i = 0; i < numberOfInputs; i++)
  12.         {
  13.             int number = int.Parse(Console.ReadLine());
  14.             biggestNumber = Math.Max(number, biggestNumber);
  15.         }
  16.  
  17.         int numberToChange = int.Parse(Console.ReadLine());
  18.  
  19.         int bitsToChange = getBitsCount(biggestNumber);
  20.  
  21.         int bitsChanged = 0;
  22.  
  23.         for (int j = 0; j < bitsToChange; j++)
  24.         {
  25.             int currentBit = (numberToChange >> j * 2) & 1;
  26.             int mask = 1 << j * 2;
  27.  
  28.             if (currentBit == 0)
  29.             {
  30.                 bitsChanged++;
  31.                 numberToChange = numberToChange | mask;
  32.             }
  33.  
  34.         }
  35.  
  36.         Console.WriteLine(numberToChange);
  37.         Console.WriteLine(bitsChanged);
  38.  
  39.     }
  40.  
  41.     public static int getBitsCount(int number)
  42.     {
  43.         int count = 0;      
  44.  
  45.         while (number > 0)
  46.         {
  47.             count++;
  48.             number = number >> 1;
  49.         }
  50.  
  51.         return Math.Max(1, count);
  52.     }
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement