gpt4 book ai didi

dart - 如何在Dart 2.x中进行BigInt算术,特别是除法?

转载 作者:行者123 更新时间:2023-12-03 03:26:14 26 4
gpt4 key购买 nike

Dart文档说BigInt除法返回的值是'double'类型。这是个问题。为了说明,这是涉及除法的算法的两种实现。第一个在 Kotlin ,第二个在达特。 Dart版本对于较小的数字可以准确运行,但是对于较大的数字则会失去精度。

Kotlin

import java.math.BigInteger

fun height(n: BigInteger, m: BigInteger): BigInteger {
var m1 = m
var s = BigInteger("1")
var b = BigInteger("1")
var ans = BigInteger("0")
var i = 0
while (i < n.toInt()) {
s *= m1--
s /= b++
ans += s
i++
}
return ans
}

Dart
BigInt height(int n, int m) {
var m1 = m; // new BigInt.from(m);
var s = 1.0; // new BigInt.from(1);
var b = 1.0; // new BigInt.from(1);
var ans = new BigInt.from(0);
var i = 0;
while (i < n) {
s *= m1--;
s /= b++;
ans += BigInt.from(s);
i++;
}
return ans;
}

从注释掉的Dart代码可以看到,我尝试了各种使用BigInt的方法。

这是带有答案的示例输入。下面给出了错误的Dart答案。
height(13, 550), 
equals(BigInt.parse('60113767426276772744951355')));

Dart错误的答案是-> 60113767426276764034189615
有人可以告诉我在Dart v2.x中完成工作的最佳方法吗?

最佳答案

以下代码有效。

BigInt height(int n, int m) {
var m1 = new BigInt.from(m);
var s = new BigInt.from(1);
var b = new BigInt.from(1);
var ans = new BigInt.from(0);
var i = 0;
while (i < n) {
s *= m1;
m1 -= new BigInt.from(1);
s = s ~/ b;
b += new BigInt.from(1);
ans += s;
i++;
}
return ans;
}

变化:
  • x++x--x = x + 1x = x - 1等效,但是BigInt.+BigInt.-仅接受BigInt值...因此存在编译器错误。
  • BigInt./返回一个double,这不是您想要的。您需要改为使用BigInt.~/运算符。
  • 关于dart - 如何在Dart 2.x中进行BigInt算术,特别是除法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55109237/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com