Exemplo n.º 1
0
def ADD_1N_N(number):
    """
    N-3
    Добавление 1 к натуральному числу
    Степанова Анастасия, 7305
    """
    # Копируем исходное число
    result = common.copy_N(number)
    # Добавляем разряд для предотвращения переполнения
    result[0] += 1
    result[1].append(0)

    i = 0
    # Пока текущий разряд равен 9 - обнуляем его и переходим к следующему
    while result[1][i] == 9:
        result[1][i] = 0
        i += 1
    # Добавляем единицу к первому разряду, не равному 9
    result[1][i] += 1

    # Если переполнения не произошло - удаляем нулевой старший разряд
    if result[1][-1] == 0:
        result[0] -= 1
        del result[1][-1]

    return result
Exemplo n.º 2
0
def ADD_NN_N(number1, number2):
    """
    N-4
    Сложение натуральных чисел
    Степанова Анастасия, 7305
    """
    # Перенос
    shift = 0

    com = COM_NN_D(number1, number2)
    # Копируем большее число и запоминаем меньшее
    if com == 2:
        result = common.copy_N(number1)
        less = number2
    else:
        result = common.copy_N(number2)
        less = number1

    # Добавляем разряд для переноса
    result[0] += 1
    result[1].append(0)

    # Складываем цифры
    i = 0
    while i < less[0]:
        s = result[1][i] + less[1][i] + shift
        if s > 9:
            result[1][i] = s - 10
            shift = 1
        else:
            result[1][i] = s
            shift = 0
        i += 1

    # Если перенос остался
    if shift == 1:
        while result[1][i] == 9:
            result[1][i] = 0
            i += 1
        result[1][i] += 1

    # Если старший разряд остался равным нулю - удаляем его
    if result[1][-1] == 0:
        result[0] -= 1
        del result[1][-1]

    return result
Exemplo n.º 3
0
def MUL_Nk_N(number, k):
    """
    N-7
    Умножение натурального числа на 10^k
    Томников Роман, 7305
    """
    # Копируем число
    result = common.copy_N(number)

    # Увеличиваем количество разрядов, добавляя нулевые младшие
    result[0] += k
    for i in range(k):
        result[1].insert(0, 0)

    return result
Exemplo n.º 4
0
def SUB_NN_N(number1, number2):
    """
    N-5
    Вычитание из первого большего натурального числа второго
    меньшего или равного
    Томников Роман, 7305
    """
    if COM_NN_D(number1, number2) == 1:
        raise Exception("Первое число должно быть больше второго!")

    # Копируем первое число
    result = common.copy_N(number1)

    # Номер старшего разряда
    i = number2[0] - 1

    while i >= 0:
        # Если цифра уменьшаемого меньше цифры вычитаемого
        if result[1][i] < number2[1][i]:
            result[1][i] += 10 - number2[1][i]
            # Номер следующего разряда
            k = i + 1
            # Пока следующие разряды равны 0 - ставим их равными 9
            while result[1][k] == 0:
                result[1][k] = 9
                k += 1
            # От первого ненулевого разряда вычитаем единицу
            result[1][k] -= 1
        else:
            result[1][i] -= number2[1][i]

        i -= 1

    # Удаляем нулевые старшие разряды
    while result[1][-1] == 0 and result[0] > 1:
        result[0] -= 1
        del result[1][-1]

    return result
Exemplo n.º 5
0
def MOD_NN_N(number1, number2):
    """
    N-12
    Остаток от деления большего натурального числа на меньшее
    или равное натуральное с остатком (делитель отличен от нуля)
    Сибиреков Денис, 7305
    """
    # Вычисляем частное и копируем в результат делимое
    p = DIV_NN_N(number1, number2)
    result = common.copy_N(number1)

    # Вычитаем из результата делитель, умноженный на 10^k и k-ую
    # цифру частного
    for i in range(p[0]):
        result = SUB_NDN_N(result, MUL_Nk_N(number2, i), p[1][i])

    # Убираем нули старших разрядов
    while result[1][-1] == 0 and result[0] > 1:
        result[0] -= 1
        del result[1][-1]

    return result