Двоичный пробел внутри положительного целого числа N — это любая максимальная последовательность последовательных нулей, окруженная единицами с обоих концов в двоичном представлении N. Например, число 9 имеет двоичное представление 1001 и содержит двоичный пробел длины 2. Число 529 имеет двоичное представление 1000010001 и содержит два двоичных пробела: один длиной 4 и один длиной 3. Число 20 имеет двоичное представление 10100 и содержит один двоичный пробел длиной 1. Число 15 имеет двоичное представление 1111 и не имеет двоичных пробелов. Число 32 имеет двоичное представление 100000 и не имеет двоичных пробелов.
Мой код:
Код: Выделить всё
public class Abc {
static void decToBinary(int n) {
int[] binaryNum = new int[1000];
// counter for binary array
int i = 0;
while (n > 0) {
// storing remainder in binary array
binaryNum[i] = n % 2;
n = n / 2;
i++;
}
int ctr = 0, k = 0;
ArrayList al = new ArrayList();
// printing binary array in reverse order
for (int j = i - 1; j >= 0; j--) {
System.out.print(binaryNum[j]);
if (binaryNum[j] == 0) {
k = j;
do {
ctr++;
k++;
} while (binaryNum[k] == 0);
al.add(ctr);
ctr = 0;
}
}
for (int ii = 0; ii < al.size(); ii++) {
System.out.println(al.get(ii));
}
}
// driver program
public static void main(String[] args) {
int n = 1041;
decToBinary(n);
}
}
Я думаю, что есть проблема в цикле do- while, особенно в al.add(ctr), но я еще не разобрался с этим.
Подробнее здесь: https://stackoverflow.com/questions/527 ... n-an-array
Мобильная версия