Advertisement
Guest User

Untitled

a guest
Oct 6th, 2015
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. #include<iostream>
  2. #include<cmath>
  3.  
  4. int input, digits, index, zCounter, oCounter, list[99], output;
  5.  
  6. int main()
  7. {
  8.     std::cin >> input;
  9.     while (input > int(pow(2, digits)))
  10.         digits++;
  11.    
  12.     for (int i = digits - 1; i >= 0; i--)
  13.         if (int(pow(2, i)) & input)
  14.         {
  15.             if (zCounter)
  16.             {
  17.                 list[index++] = zCounter;
  18.                 zCounter = 0;
  19.             }
  20.             oCounter++;
  21.         }
  22.         else
  23.         {
  24.             if (oCounter)
  25.             {
  26.                 list[index++] = oCounter;
  27.                 oCounter = 0;
  28.             }
  29.             zCounter++;
  30.         }
  31.    
  32.     if (zCounter)
  33.     {
  34.         list[index++] = zCounter;
  35.         zCounter = 0;
  36.     }
  37.    
  38.     if (oCounter)
  39.     {
  40.         list[index++] = oCounter;
  41.         oCounter = 0;
  42.     }
  43.  
  44.     bool ones = true;
  45.     int power = digits-1;
  46.     for (int j = 0; j < index; j++)
  47.     {
  48.         int max = 0;
  49.         int mIndex = 0;
  50.         for (int i = 0; i<index; i++)
  51.             if(list[i] > max)
  52.                 max = list[mIndex = i];
  53.    
  54.         list[mIndex] = 0;
  55.    
  56.         if(ones)
  57.             for (int k = 0; k < max; k++)
  58.                 output += int(pow(2, power--));
  59.         else
  60.             for (int k = 0; k < max; k++)
  61.                 power--;
  62.    
  63.         ones ^= 1;
  64.     }
  65.     std::cout << output;
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement