решение конечно не самое изящное, стыдновато за него, но тесты проходит вроде...не понимаю, где ошибка
package com.javarush.task.task39.task3903;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/*
Неравноценный обмен
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please enter a number: ");
long number = Long.parseLong(reader.readLine());
System.out.println("Please enter the first index: ");
int i = Integer.parseInt(reader.readLine());
System.out.println("Please enter the second index: ");
int j = Integer.parseInt(reader.readLine());
System.out.println("The result of swapping bits is " + swapBits(number, i, j));
}
public static long swapBits(long number, int i, int j) {
//переводим число в двоичное
String s = Long.toBinaryString(number);
//добиваем 0 до максимальной длины
if (s.length() < 63) {
for (int k = s.length(); k < 63; k++) {
s = 0 + s;
}
}
//свапаем биты
char[] list = s.toCharArray();
char a = list[62 - i];
char b = list[62 - j];
//идем с другого конца, так как длина массива всегда известна - 63, вычитаем из индекса последней яцейки 62
list[62 - i] = b;
list[62 - j] = a;
s = String.valueOf(list);
//ну и парсим в двоичную
return Long.parseLong(s, 2);
}
}