# Reverse an array to change endianness of numbers
+ s0 e0 g! v5 w+ pdef num_array_reverse(num_array):
* y& Q% e& ^- P left = 0
" t2 Y+ u1 T; k( Z/ h( H right = len(num_array) - 1;
. h W7 i. K2 x9 c9 ]' j while (left < right):
9 |9 [% ~4 C7 x1 X1 Y' i num_array[left], num_array[right] = num_array[right], num_array[left]" R/ V" h2 l, h
left += 1- X8 ]4 S, e% ~" I6 v: b) q
right -= 10 C; E# ^9 j! L
# U7 w2 I- K7 ?6 Z" r5 Z! H# Multiply two numbers1 H+ e. ?# r! C3 c, ^
# Input: Big-endian order
" w/ d! C' b: }# Output: Big-endian order- J$ R+ r9 S3 K, V/ l I) ]
def multiply(num_a_array, num_b_array):# c3 N7 E( _! \& t0 e3 d
# Convert big-endian to little-endian0 v& S7 U/ U4 R! [; L. F
num_array_reverse(num_a_array)
8 r4 D; O$ v2 s7 N; x4 [3 R num_array_reverse(num_b_array)
: C! x _8 i2 V6 C
3 k. j9 b$ W& V5 J* |9 B6 a # Initialize the result
$ B$ x' i2 [* M9 ]3 }5 V num_result_arr = []7 @/ X7 V/ R* c: R+ M$ w
+ O/ f7 w# Q; z
# Multiply% D& {) g4 a" y; V3 f, V
for i in range(0, len(num_a_array)):6 A( Q' N0 |0 M5 W) T0 Z+ f% Y
carry = 0& F; G' b+ P& p3 _6 }2 i3 Q
j = 0 a0 P+ w% L) k6 n4 N: [: u. y
while (j < len(num_b_array)):5 y, S8 {) ^6 J* w. _ M
val = num_a_array[i] * num_b_array[j] + carry' ^6 z& O4 {+ _) k/ o3 n5 J
if (len(num_result_arr) <= i + j):) R0 D+ ^* R q9 a
num_result_arr.append(0)
4 d# K$ _& L* @7 ~, ], L val += num_result_arr[i + j]# K: w3 w# Z, W ?( ]
carry = val / 10
; ?& V& e; p9 Q" j$ ?4 v& x. p val %= 109 w; [. _4 |+ _5 H- Q# e9 W) i$ k
num_result_arr[i + j] = val
. u2 |% ]5 k% p: u% I' j/ I4 A j += 1
5 t" `. U5 X7 I- A& m8 L if (carry):
/ F( t4 A. Y9 } if (len(num_result_arr) <= i + j):$ Z- z! m! _! L' `2 d4 F5 j5 e
num_result_arr.append(carry)
3 L( u1 G3 }- e5 V8 |, g$ T else:
# P7 g& x# D4 w/ N' I. W& O num_result_arr[i + j] = carry& B1 K& O+ i7 T5 _5 v, @& \! J! b
a( {% b1 u1 |& J # Convert little-endian to big-endian
" K: F' H3 E) s num_array_reverse(num_a_array)( S/ \$ l Z+ u8 r# O8 o8 g
num_array_reverse(num_b_array)
8 T8 D2 _. c) b) t4 ^ num_array_reverse(num_result_arr)6 j7 y4 J; T: k8 d; ~3 n, X
- s8 P, j m# S$ A3 X+ B. d$ _
return num_result_arr! l1 H( ?+ |- q# U
. A5 _. { `& l- {
def multiply_and_print(num_a_array, num_b_array):7 V& y% a$ ?1 C. O! L1 }+ n( R, P
num_result_array = multiply(num_a_array, num_b_array), `! A# z, U1 l: f# b
print("{0} x {1} = {2}".format(num_a_array, num_b_array, num_result_array))
3 i0 a- `. R1 b$ f$ [( B! ]0 X4 v, {/ X d+ M
def main():
2 H6 \9 F( x+ } multiply_and_print([1, 2], [1, 0]) O$ H/ F4 p9 d# z1 _) a
multiply_and_print([5, 3, 6, 2, 8, 0, 2, 8], [3, 5, 2, 3, 2, 1])1 J8 S' {# j# e0 ^
# ]; ~, W0 L) F1 e# Jmain()
|