コード例 #1
0
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
コード例 #2
0
 def test_general_case(self):
     arr1 = [0, 0, 1]
     arr2 = [0, 1, 0]
     self.assertEqual(binary_add(arr1, arr2), [0, 1, 1, 0])
コード例 #3
0
 def test_adding_zeros(self):
     arr1 = [0, 0, 0]
     arr2 = [0, 0, 0]
     self.assertEqual(binary_add(arr1, arr2), [0, 0, 0, 0])
コード例 #4
0
 def test_additive_identity(self):
     arr1 = [0, 0, 1]
     arr2 = [0, 0, 0]
     self.assertEqual(binary_add(arr1, arr2), [0, 0, 1, 0])
コード例 #5
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])
コード例 #6
0
 def test_adding_with_carry(self):
     arr1 = [0, 1, 0]
     arr2 = [1, 1, 1]
     self.assertEqual(binary_add(arr1, arr2), [1, 0, 0, 1])