Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.util.logging.Logger;
- public class ChangeEvenBits {
- public static void main(String[] args) {
- Scanner input = new Scanner(System.in);
- int n = input.nextInt();
- long[] numbers = new long[n];
- for (int i = 0; i < n; i++) {
- numbers[i] = input.nextInt();
- }
- long toChange = input.nextLong();
- String binaryRepToChange = Long.toBinaryString(toChange);
- int totalChanges = 0;
- for (int i = 0; i < numbers.length; i++) {
- long temp = numbers[i];
- //count total bits
- int count = 0;
- while(temp > 0) {
- temp = temp >> 1;
- count++;
- }
- //System.out.print(count);
- int leadingZeros = (count*2 - 1) - binaryRepToChange.length();
- if (leadingZeros < 0) {
- leadingZeros = 0;
- }
- String zeros = new String(new char[leadingZeros]).replace('\0', '0');
- char[] newNum = (zeros + binaryRepToChange).toCharArray();
- //System.out.print(newNum);
- for (int j = newNum.length - 1; j >= 0; j-=2) {
- if (count < 1) {
- break;
- }
- if (newNum[j] == '0') {
- totalChanges++;
- newNum[j] = '1';
- }
- count--;
- }
- binaryRepToChange = String.valueOf(newNum);
- }
- System.out.println(Long.parseLong(binaryRepToChange, 2));
- System.out.println(totalChanges);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement