1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
| #! /usr/local/bin/python3.6
"""
Comparison between two big-digit integers
"""
import random
import sys
import traceback
class CompareBigDigits:
D_L = 1000 # Number of big-digit integer (Left-hand side)
D_R = 1001 # Number of big-digit integer (Right-hand side)
def __init__(self):
self.l = [random.randrange(10) for _ in range(self.D_L)]
self.r = [random.randrange(10) for _ in range(self.D_R)]
def exec(self):
""" Execution """
try:
s = self.__compare(self.l, self.r)
self.__display(self.l, self.r, s)
except Exception as e:
raise
def __compare(self, l, r):
""" Comparison
:param list l
:param list r
:return int s: 1 (l > r)
0 (l = r)
-1 (l < r)
"""
try:
size_l, size_r = len(l), len(r)
if size_l > size_r:
for i in range(size_l - 1, size_r - 1, -1):
if l[i] != 0:
return 1
if size_l < size_r:
for i in range(size_r - 1, size_l - 1, -1):
if r[i] != 0:
return -1
for i in range(min([size_l, size_r]) - 1, -1 , -1):
if l[i] > r[i]:
return 1
if l[i] < r[i]:
return -1
return 0
except Exception as e:
raise
def __display(self, l, r, s):
""" Display
:param list l
:param list r
:param int s:-1 or 0 or 1
"""
try:
print("[LEFT] =")
for i in range(self.D_L - 1, -1, -1):
print(l[i], end="")
if (self.D_L - i) % 10 == 0:
print(" ", end="")
if (self.D_L - i) % 50 == 0:
print()
print()
print("[RIGHT] =")
for i in range(self.D_R - 1, -1, -1):
print(r[i], end="")
if (self.D_R - i) % 10 == 0:
print(" ", end="")
if (self.D_R - i) % 50 == 0:
print()
print()
# 大小比較結果
sign = "=" if s == 0 else (">" if s > 0 else "<")
print("[LEFT] {} [RIGHT]".format(sign))
except Exception as e:
raise
if __name__ == '__main__':
try:
obj = CompareBigDigits()
obj.exec()
except Exception as e:
traceback.print_exc()
sys.exit(1)
|