def testSplit(self): a = BigNumber(1257892) (b1, b2, n1, b1b2len) = a.split() val = str(b1) == "125" val = val and str(b2) == "7892" val = val and n1 == 4 val = val and b1b2len == 7 self.assertEqual(val, True)
def testSplit(self): a = BigNumber(1257892) (b1, b2, n1, b1b2len) = a.split() val = str(b1) == '125' val = val and str(b2) == '7892' val = val and n1 == 4 val = val and b1b2len == 7 self.assertEqual(val, True)
def testShiftLeft(self): b = BigNumber(125) b.shift_left(1) self.assertEqual(str(b), "1250") b.shift_left(3) self.assertEqual(str(b), "1250000") b.parse(0) b.shift_left(3) self.assertEqual(b.is_zero(), True)
def sum_all_big_numbers(): """ Сумма всех больших чисел. Функция возвращает объект класса BigNumber, в котором значение суммы сохраненно в атрибуте big_number. The sum of all the big numbers. The function returns an object of class BigNumber in which the value of the sum is stored in the big_number attribute. """ list_of_big_numbers = file_processing_set_of_big_numbers() object_with_sum = BigNumber('0') for i in list_of_big_numbers: object_with_sum = object_with_sum + BigNumber(i) return object_with_sum
def testShiftRight(self): b = BigNumber([5, 2, 1]) b.shift_right(1) self.assertEqual(str(b), '12') b.shift_right(1) self.assertEqual(str(b), '1') b.shift_right(1) self.assertEqual(str(b), '0')
def testShiftRight(self): b = BigNumber([5, 2, 1]) b.shift_right(1) self.assertEqual(str(b), "12") b.shift_right(1) self.assertEqual(str(b), "1") b.shift_right(1) self.assertEqual(str(b), "0")
def sum_of_digits_of_big_power_number(n, pow): """ Функция вычисляет сумму всех чисел результата возведения целого числа n в большую целую степень pow. Целое число n представляется в виде экземпляра класса BigNumber. """ n = BigNumber(n) big_number = big_power(n, pow) sum = 0 for i in big_number.big_number: sum += int(i) return sum
def big_power(number, pow): """ Функция предназначена для быстрого возведения целого числа в целую большую степень на основе следующих рекурентных соотношений: a ** pow = (number ** 2) ** pow / 2 (при четном pow); a ** pow = number * number ** pow - 1 (при нечетном pow). number - должен быть объектом класса BigNumber The function is designed to quickly raise an integer to an integer power based on the following recurrence relations: a ** pow = (number ** 2) ** pow / 2 (with even pow); a ** pow = number * number ** pow - 1 (with odd pow pow). number - must be an object of class BigNumber. """ if pow > 0: if pow % 2: return number * big_power(number, pow - 1) else: return big_power(number * number, pow // 2) return BigNumber(1)
def testAdd(self): b1 = BigNumber() b2 = BigNumber() b3 = None invalid = False; for i in xrange(-3643, 164): if (invalid): break; for j in xrange(-343, 562): b1.parse(i) b2.parse(j) b3 = b1 + b2 bstr = str(b3) vstr = str(i + j) if (bstr != vstr) : invalid = True break self.assertEqual(invalid, False, "should be {0} but its {1} for {2} {3} (big: {4} and {5})". format(vstr, bstr, i, j, b1, b2))
def testMultiply(self): x = 3564591 y = 278034 b1 = BigNumber(x) b2 = BigNumber(y) b3 = b1 * b2 z = x * y str1 = str(b3) str2 = str(z) self.assertEqual(str1 == str2, True, \ "Its {0} but it should be {1}".format(str1, str2)) for i in xrange(0, 1000): x = int(random.random() * 400000) - 200000 y = int(random.random() * 8000000) - 4000000 b1.parse(x) b2.parse(y) b3 = b1 * b2 z = x * y str1 = str(b3) str2 = str(z) self.assertEqual(str1 == str2, True, \ "Its {0} but it should be {1}".format(str1, str2))
def testMultiply(self): x = 3564591 y = 278034 b1 = BigNumber(x) b2 = BigNumber(y) b3 = b1 * b2 z = x * y str1 = str(b3) str2 = str(z) self.assertEqual(str1 == str2, True, "Its {0} but it should be {1}".format(str1, str2)) for i in xrange(0, 1000): x = int(random.random() * 400000) - 200000 y = int(random.random() * 8000000) - 4000000 b1.parse(x) b2.parse(y) b3 = b1 * b2 z = x * y str1 = str(b3) str2 = str(z) self.assertEqual(str1 == str2, True, "Its {0} but it should be {1}".format(str1, str2))
def testAdd(self): b1 = BigNumber() b2 = BigNumber() b3 = None invalid = False for i in xrange(-3643, 164): if invalid: break for j in xrange(-343, 562): b1.parse(i) b2.parse(j) b3 = b1 + b2 bstr = str(b3) vstr = str(i + j) if bstr != vstr: invalid = True break self.assertEqual( invalid, False, "should be {0} but its {1} for {2} {3} (big: {4} and {5})".format(vstr, bstr, i, j, b1, b2) )
def testShiftLeft(self): b = BigNumber(125) b.shift_left(1) self.assertEqual(str(b), '1250') b.shift_left(3) self.assertEqual(str(b), '1250000') b.parse(0) b.shift_left(3) self.assertEqual(b.is_zero(), True)
def testZero(self): a = BigNumber(-150674) self.assertEqual(str(a), "-150674") a.parse(5430) self.assertEqual(str(a), "5430")
def testInit(self): a = BigNumber() self.assertEqual(a.length == 0 and len(a.digit) == 0, True) a.zero() self.assertEqual(str(a), '0')
def testZero(self): a = BigNumber(-150674) self.assertEqual(str(a), '-150674') a.parse(5430) self.assertEqual(str(a), '5430')
def testInit(self): a = BigNumber() self.assertEqual(a.length == 0 and len(a.digit) == 0, True) a.zero() self.assertEqual(str(a), "0")