我有以下函数:
pub fn s_v1(n: &u64) -> u64 {
let mut x: u64 = 1;
for i in 1..=*n {
x = x * (*n + i) / i;
}
x
}
这段代码可以正确得出 s_v1(&20) == 137846528820
的答案。
然而,如果我将 for 循环中的行改为 x *= (*n + i) / i;
,则答案会变成 s_v1(&20) == 16094453760
。
为什么结果不同?x = x * y
和 x *= y
不是一样的吗?
x = x * y
和x *= y
的意思相同,但是你的表达式不是这种形式。其中有一个除法运算。x = x * y / z
不等同于x *= y / z
。因为运算顺序不同。 - n. m./
表示整数除法,那么a * (b / c)
和(a * b) / c
之间存在区别,因为余数舍去的方式不同。 - qrsngkyx = x * (*n + i) / i;
更改为x *= (*n + i); x /= i;
。 - Ben VoigtnCr(2*n,n)
,即从一个大小为2n的集合中(不重复地)抽取n个元素的无序组合数。 - Ben Voigt