-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcalc.py
63 lines (45 loc) · 1.86 KB
/
calc.py
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
import math
class Calc:
def add2Numbers(self, num1: int, num2: int, base: int) -> str:
num1Dec: str = self.convertNumber(num1, base, 10)
num2Dec: str = self.convertNumber(num2, base, 10)
resDec: int = int(num1Dec) + int(num2Dec)
return self.convertNumber(resDec, 10, base)
def addByList(self, numbers: list, base: int) -> str:
resDec: int = 0
for number in numbers:
decNumber: str = self.convertNumber(number, base, 10)
resDec: int = resDec + int(decNumber)
return self.convertNumber(resDec, 10, base)
def convertNumber(self, number: int, startBase: int, endBase: int) -> str:
if startBase == endBase:
return str(number)
if startBase != 10:
return self.__getDecimalValue(number, startBase)
range: int = self.__getUnderRange(endBase, number)
res: str = self.__getConvertionByAlgoBySuppr(endBase, range, number)
return res
def __getConvertionByAlgoBySuppr(self, endBase, range, remaining) -> str:
res: str = ''
while range >= 1:
divider: int = math.floor(remaining / (endBase ** range))
res += str(divider)
remaining -= (endBase ** range) * divider
range -= 1
res += str(remaining)
return res
def __getUnderRange(self, endBase, remaining) -> int:
range: int = 0
while endBase ** range <= remaining:
range += 1
return range - 1
def __getDecimalValue(self, number: int, startBase: int) -> str:
stringValue: str = str(number)
stringValues: list = list(stringValue)
length: int = len(stringValue)
res: int = 0
exp: int = length - 1
for value in stringValues:
res += (int(value)) * (startBase ** exp)
exp -= 1
return str(res)