Большое целое число Swift 4.0

Я хочу выполнить операцию большого мода (%), как в примере ниже:

083123456787654325500479087654 % 55

Как видите, это число больше, чем Int64.max (9223372036854775807).

Я попытался разобрать это «083123456787654325500479087654» из строки в десятичное число, но я не могу выполнить операцию модификации с двумя десятичными знаками.

Какие-либо предложения?


person user3161571    schedule 28.02.2018    source источник
comment
Есть ответ ЗДЕСЬ, вы можете использовать этот проект git для выполнения BigInt   -  person Jake    schedule 01.03.2018


Ответы (1)


Вы можете определить собственный оператор мода между двумя десятичными знаками, например, следующий. У меня нет времени проверять все сценарии. Поэтому я выбираю простейший случай: по модулю между двумя положительными числами. Вы можете расширить его в соответствии с вашей ситуацией:

func % (lhs: Decimal, rhs: Decimal) -> Decimal {
    precondition(lhs > 0 && rhs > 0)

    if lhs < rhs {
        return lhs
    } else if lhs == rhs {
        return 0
    }

    var quotient = lhs / rhs
    var rounded = Decimal()
    NSDecimalRound(&rounded, &quotient, 0, .down)

    return lhs - (rounded * rhs)
}

let a = Decimal(string: "083123456787654325500479087654")!
print(a % 55)

Результат 49.

person Mike Henderson    schedule 01.03.2018