def binary_multiply(A, B): if len(A) > len(B): utils.prepend_fill(B, len(A) - len(B)) else: utils.prepend_fill(A, len(B) - len(A)) print 'A: {}'.format(A) print 'B: {}'.format(B) print '===A * B===' n = len(A) A.reverse() B.reverse() C = [0] * 2 * n for i in xrange(0, n): K = [B[i] * A[j] for j in xrange(0, n)] utils.prepend_fill(K, i) utils.append_fill(K, 2*n - len(K)) K.reverse() C = binary_add.binary_add(K, C) print 'C: {} = {}'.format(C, utils.binlist2num(C)) return C
def test_general_case(self): arr1 = [0, 0, 1] arr2 = [0, 1, 0] self.assertEqual(binary_add(arr1, arr2), [0, 1, 1, 0])
def test_adding_zeros(self): arr1 = [0, 0, 0] arr2 = [0, 0, 0] self.assertEqual(binary_add(arr1, arr2), [0, 0, 0, 0])
def test_additive_identity(self): arr1 = [0, 0, 1] arr2 = [0, 0, 0] self.assertEqual(binary_add(arr1, arr2), [0, 0, 1, 0])
def test_adding_with_max_values(self): arr1 = [1, 1, 1] arr2 = [1, 1, 1] self.assertEqual(binary_add(arr1, arr2), [0, 1, 1, 1])
def test_adding_with_carry(self): arr1 = [0, 1, 0] arr2 = [1, 1, 1] self.assertEqual(binary_add(arr1, arr2), [1, 0, 0, 1])