Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- class BitFlipper
- {
- static void Main()
- {
- ulong number = ulong.Parse(Console.ReadLine());
- ulong [] mask = new ulong[64];
- int [] pos = new int[64];
- ulong [] bitValue = new ulong[64];
- int i;
- for (i = 63; i >= 0; i--)
- {
- //getting bit values
- pos[i] = i;
- mask[i] = 1ul << pos[i];
- bitValue[i] = (ulong)(number & mask[i] ) >> pos[i];
- }
- i = 63;
- while (i >= 2)
- {
- if (bitValue[i] == 1 && bitValue[i-1] == 1 && bitValue[i-2] == 1)
- {
- number = (ulong)(number & (~ mask[i]));
- number = (ulong)(number & (~ mask[i-1]));
- number = (ulong)(number & (~ mask[i-2]));
- i = i-3;
- }
- else if (bitValue[i] == 0 && bitValue[i-1] == 0 && bitValue[i-2] == 0)
- {
- number = (ulong)(number | mask[i]);
- number = (ulong)(number | mask[i-1]);
- number = (ulong)(number | mask[i-2]);
- i = i - 3;
- }
- else// if not 000 and not 111 next pos
- {
- i--;
- }
- }
- Console.WriteLine(number);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement