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)
Beispiel #2
0
 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
Beispiel #5
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 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)
Beispiel #9
0
 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))
Beispiel #10
0
 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)
     )
Beispiel #13
0
 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")
Beispiel #15
0
 def testInit(self):
     a = BigNumber()
     self.assertEqual(a.length == 0 and len(a.digit) == 0, True)
     a.zero()
     self.assertEqual(str(a), '0')
Beispiel #16
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")