import java.util.Scanner;
import java.util.Arrays;
import java.lang.Math;

public class Main
{
    public static void main(String[] args)
    {
        int num;
        int count;
        test t;
        test eo;
        
        Scanner reader = new Scanner(System.in);
        System.out.println("Enter a number no larger than 2,000,000,000: ");
        num = reader.nextInt();
        reader.close();
        System.out.println("\n");
        t= new test(num);
        System.out.println("\n\n***Program will execute until next number found with: " +
        t.countOnes() + " bits set***");
        
        for (int i=1; i<2*num; i++)
        {
            eo=new test(num+i);
            
            if (eo.countOnes()==t.countOnes() && (num+i)>num)
            {
                System.out.println(num + " has " + t.countOnes() + " bits set." );
                System.out.println(num+i + " has " + eo.countOnes() + " bits set." );
                break;
            }
        }
    }
}

class test
{
    int binary[] = new int[31];
    int j;
    int i;
    
    String conversion;
    int num;
    int numberOnes;
    int divisor;
    
    public test(int num)
    {
        System.out.println("\n");
        System.out.println("Decimal number is: " + num);
        int length = binary.length;
        System.out.println("*** This program will convert decimal " + num+ " into binary");
        
        for (j=length-1; j>=0; j--)
        {
            divisor = (int)(Math.pow(2,j));
            
            if (num - divisor >=0)
            {
                binary[(length-1)-j] = 1;
                num=num-divisor;
                numberOnes++;
            }
        }
        conversion = Arrays.toString(binary);
        System.out.println("The binary version is: " + conversion );
        System.out.println("Number bits set: " + countOnes());
    }
    
    int countOnes()
    {
        return numberOnes;
    }
    
    String binaryConversion()
    {
        return conversion;
    }
    
    int valueDivisor()
    {
        return j;
    }
}