如何在Dart 2.x中进行BigInt运算,特别是除法运算?
Dart文档说明BigInt除法返回一个类型为“double”的值。这是一个问题。为了举例说明,这里有两个涉及除法的算法实现。第一个在科特林,第二个在达特。Dart版本对于较小的数字运行准确,但对于较大的数字则会失去精度 Kotlin如何在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
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
但只接受BigInt值。。。所以有一个编译器错误x=x-1
- 返回一个
,这不是您想要的。您需要改用运算符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;
}