alexmitev

BitFlipper

Nov 12th, 2015
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.78 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7.  
  8. class Program
  9. {
  10.     static void Main()
  11.     {
  12.         UInt64 number =  UInt64.Parse(Console.ReadLine());
  13.    
  14.  
  15.         for (int i = 63; i >= 2; i--)
  16.         {
  17.             if (GetBit(number, i) == 0 && GetBit(number, i - 1) == 0 && GetBit (number, i - 2) == 0)
  18.             {
  19.              
  20.                number = SetBit(number, i, 1);
  21.                number = SetBit(number, i - 1, 1);
  22.                number = SetBit(number, i - 2, 1);
  23.                 i -= 2;
  24.                 continue;
  25.             }
  26.             else if (GetBit(number, i) == 1 && GetBit(number, i - 1) == 1 && GetBit (number, i - 2) == 1)
  27.             {
  28.                number =  SetBit(number, i, 0);
  29.                number =  SetBit(number, i - 1, 0);
  30.                number = SetBit(number, i - 2, 0);
  31.                 i -= 2;              
  32.             }        
  33.         }
  34.  
  35.         Console.WriteLine(number);
  36.  
  37.     }
  38.  
  39.     static UInt64 GetBit(UInt64 number, int position)
  40.     {
  41.         UInt64 bit = (number >> position) & 1;
  42.         return bit;
  43.     }
  44.  
  45.     static UInt64 SetBit(UInt64 number, int position, int bit)
  46.     {
  47.         UInt64 mask = (UInt64)1 << position;
  48.         if (bit == 1)
  49.         {
  50.             number = number | mask;
  51.         }
  52.         else
  53.         {
  54.             number = number & (~mask);
  55.         }
  56.  
  57.  
  58.         return number;
  59.     }
  60.  
  61.     //static int ExchangeBits(int number, int position1, int position2)
  62.     //{
  63.     //    int bit1 = GetBit(number, position1);
  64.     //    int bit2 = GetBit(number, position2);
  65.     //    number = SetBit(number, bit1, position2);
  66.     //    number = SetBit(number, bit2, position1);
  67.  
  68.  
  69.     //    return number;
  70.     //}
  71. }
Advertisement
Add Comment
Please, Sign In to add comment