Big Integer Swift 4.0

问题描述 投票:1回答:1

我想执行一个大的mod(%)操作,如下例所示:

083123456787654325500479087654 % 55

如你所见,这个数字大于Int64.max(9223372036854775807)

我试图将这个“083123456787654325500479087654”从字符串解析为十进制,但我不能用两个小数执行mod操作。

有什么建议?

swift bigint mod
1个回答
0
投票

您可以在两个小数之间定义一个自定义mod运算符,例如follow。我没有时间测试所有场景。所以我选择了最简单的案例:两个正数之间的模数。您可以根据自己的情况进行扩展:

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。

© www.soinside.com 2019 - 2024. All rights reserved.