Guest User

Untitled

a guest
Dec 13th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.10 KB | None | 0 0
  1. #! /usr/local/bin/python3.6
  2. """
  3. Multiplication of big-digit values
  4. """
  5. import random
  6. import sys
  7.  
  8.  
  9. class MultiplyNormal:
  10. D_MAX = 1024 # Maximum number of digits (power of 2)
  11. D = 1024 # Digits of computation (Multiples of 4 <= D_MAX)
  12.  
  13. def __init__(self):
  14. self.a = [random.randrange(10) for _ in range(self.D)]
  15. self.b = [random.randrange(10) for _ in range(self.D)]
  16.  
  17. def compute(self):
  18. """
  19. Computation of multiplication
  20. """
  21. try:
  22. for i in range(self.D_MAX - len(self.a)):
  23. self.a.append(0)
  24. for i in range(self.D_MAX - len(self.b)):
  25. self.b.append(0)
  26. z = self.__multiply_normal(self.a, self.b)
  27. z = self.__do_carry(z)
  28. self.__display(self.a, self.b, z);
  29. except Exception as e:
  30. raise
  31.  
  32. def __multiply_normal(self, a, b):
  33. """
  34. Normal multiplication
  35. """
  36. try:
  37. a_len, b_len = len(a), len(b)
  38. z = [0 for _ in range(a_len + b_len)]
  39. for j in range(b_len):
  40. for i in range(a_len):
  41. z[j + i] += a[i] * b[j]
  42. return z
  43. except Exception as e:
  44. raise
  45.  
  46. def __do_carry(self, a):
  47. """
  48. Process of carrying
  49. """
  50. cr = 0
  51.  
  52. try:
  53. for i in range(len(a)):
  54. a[i] += cr
  55. cr = int(a[i] / 10)
  56. a[i] -= cr * 10
  57. if cr != 0:
  58. print("[ OVERFLOW!! ] ", cr)
  59. return a
  60. except Exception as e:
  61. raise
  62.  
  63. def __display(self, a, b, z):
  64. """
  65. Display
  66. """
  67. a_len, b_len, z_len = self.D_MAX, self.D_MAX, self.D_MAX * 2
  68.  
  69. try:
  70. while a[a_len - 1] == 0:
  71. if a[a_len - 1] == 0:
  72. a_len -= 1
  73. while b[b_len - 1] == 0:
  74. if b[b_len - 1] == 0:
  75. b_len -= 1
  76. while z[z_len - 1] == 0:
  77. if z[z_len - 1] == 0:
  78. z_len -= 1
  79. print("a =")
  80. for i in range(a_len - 1, -1, -1):
  81. print(a[i], end="")
  82. if (a_len - i) % 10 == 0:
  83. print(" ", end="")
  84. if (a_len - i) % 50 == 0:
  85. print()
  86. print()
  87. print("b =")
  88. for i in range(b_len - 1, -1, -1):
  89. print(b[i], end="")
  90. if (b_len - i) % 10 == 0:
  91. print(" ", end="")
  92. if (b_len - i) % 50 == 0:
  93. print()
  94. print()
  95. print("z =")
  96. for i in range(z_len - 1, -1, -1):
  97. print(z[i], end="")
  98. if (z_len - i) % 10 == 0:
  99. print(" ", end="")
  100. if (z_len - i) % 50 == 0:
  101. print()
  102. print()
  103. except Exception as e:
  104. raise
  105.  
  106.  
  107. if __name__ == '__main__':
  108. try:
  109. obj = MultiplyNormal()
  110. obj.compute()
  111. except Exception as e:
  112. print("EXCEPTION!", e.args, file=sys.stderr)
  113. sys.exit(1)
Add Comment
Please, Sign In to add comment