【问题标题】:Big Integer Swift 4.0大整数 Swift 4.0
【发布时间】:2018-02-28 21:49:02
【问题描述】:

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

083123456787654325500479087654 % 55

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

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

有什么建议吗?

【问题讨论】:

标签: swift bigint mod


【解决方案1】:

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

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 2017-04-20
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多