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

如何在Dart 2.x中进行BigInt运算,特别是除法运算?,dart,biginteger,arithmetic-expressions,bigint,Dart,Biginteger,Arithmetic Expressions,Bigint,Dart文档说明BigInt除法返回一个类型为“double”的值。这是一个问题。为了举例说明,这里有两个涉及除法的算法实现。第一个在科特林,第二个在达特。Dart版本对于较小的数字运行准确,但对于较大的数字则会失去精度 Kotlin import java.math.BigInteger fun height(n: BigInteger, m: BigInteger): BigInteger { var m1 = m var s = BigInteger("1") var

Dart文档说明BigInt除法返回一个类型为“double”的值。这是一个问题。为了举例说明,这里有两个涉及除法的算法实现。第一个在科特林,第二个在达特。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答案是-->
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;
}
BigInt高度(int n,int m){
var m1=新的BigInt.from(m);
var s=新的BigInt.from(1);
var b=新的BigInt.from(1);
var ans=新的BigInt.from(0);
var i=0;
而(i
变化:

  • x++
    x--
    等同于
    x=x+1
    x=x-1
    但只接受BigInt值。。。所以有一个编译器错误
  • 返回一个
    double
    ,这不是您想要的。您需要改用运算符
height(13, 550), 
          equals(BigInt.parse('60113767426276772744951355')));
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;
}