Advertisement
Valleri

C# Basics Exam 25 July 2014 Evening - 05. Change Even Bits

Jul 31st, 2014
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.29 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.util.logging.Logger;
  3.  
  4.  
  5. public class ChangeEvenBits {
  6.  
  7.     public static void main(String[] args) {
  8.         Scanner input = new Scanner(System.in);
  9.         int n = input.nextInt();
  10.         long[] numbers = new long[n];
  11.        
  12.         for (int i = 0; i < n; i++) {
  13.             numbers[i] = input.nextInt();
  14.         }
  15.         long toChange = input.nextLong();
  16.         String binaryRepToChange = Long.toBinaryString(toChange);
  17.         int totalChanges = 0;
  18.        
  19.         for (int i = 0; i < numbers.length; i++) {
  20.             long temp = numbers[i];
  21.             //count total bits
  22.             int count = 0;
  23.             while(temp > 0) {
  24.                 temp = temp >> 1;
  25.                 count++;
  26.             }
  27.             //System.out.print(count);
  28.             int leadingZeros = (count*2 - 1) - binaryRepToChange.length();
  29.             if (leadingZeros < 0) {
  30.                 leadingZeros = 0;
  31.             }
  32.             String zeros = new String(new char[leadingZeros]).replace('\0', '0');
  33.            
  34.             char[] newNum = (zeros + binaryRepToChange).toCharArray();
  35.            
  36.             //System.out.print(newNum);
  37.            
  38.             for (int j = newNum.length - 1; j >= 0; j-=2) {
  39.                 if (count < 1) {
  40.                     break;
  41.                 }
  42.                 if (newNum[j] == '0') {
  43.                     totalChanges++;
  44.                     newNum[j] = '1';
  45.                 }
  46.                 count--;
  47.             }
  48.             binaryRepToChange = String.valueOf(newNum);
  49.         }
  50.         System.out.println(Long.parseLong(binaryRepToChange, 2));
  51.         System.out.println(totalChanges);
  52.     }
  53.  
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement