大整数雨燕 4.0

  • 本文关键字:整数 swift bigint mod
  • 更新时间 :
  • 英文 :


我想执行一个大模组(%(操作,如下例所示:

083123456787654325500479087654 % 55

如您所见,此数字大于 Int64.max (9223372036854775807(

我试图将这个"083123456787654325500479087654"从字符串解析为十进制,但我无法对两个小数执行 mod 操作。

有什么建议吗?

您可以在两个小数之间定义一个自定义 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。

相关内容

  • 没有找到相关文章

最新更新