AND product
Problem Statement
You will be given two intergers A and B. You are required to compute the bitwise AND amongst all natural numbers lying between A and B, both inclusive.
Input Format
First line of the input contains T, the number of testcases to follow.
Each testcase in a newline contains A and B separated by a single space.
Constraints
1 <= T <= 200
0 <= A <= B <= 2^32
Output Format
Output one line per test case with the required bitwise AND
let read_line_int () = let line = read_line () in let lst = Str.split (Str.regexp " ") line in let lst_int = List.map int_of_string lst in let arr = Array.of_list lst_int in arr ;; let number_of_bits n = let rec num_of_bits count n = match n with | 0 -> count | n -> num_of_bits (count + 1) (n lsr 1) in num_of_bits 0 n ;; let rec process result a b = let n_bits_a = number_of_bits a and n_bits_b = number_of_bits b in match n_bits_a = n_bits_b with | false -> result | true -> let m = 1 lsl (n_bits_a - 1) in process (result + m) (a - m) (b - m) ;; let process_main a b = process 0 a b ;; (* main part *) let num_case = read_int () ;; for i = 1 to num_case do let arr = read_line_int () in let result = process_main arr.(0) arr.(1) in Printf.printf "%d\n" result done;;
No comments:
Post a Comment