有人可以解释一下这个c++行为吗[关闭]

问题描述 投票:0回答:1

我得到了错误的答案:

int N = 6;
int r = 3;
long result = 1;
for(int i=1;i<=r;++i){
   result *= (N-r+i)/(i);
}

输出:16

但是这个给出了正确的答案:

for(int i=1;i<=r;++i){
        result *= N-r+i;
        result /= i;
}

输出:20

请解释一下这种行为

c++ arithmetic-expressions
1个回答
0
投票

第一个代码片段将

result
的当前值乘以
((N-r+i)/(i))
。这等于说
result = result * ((N-r+i)/(i));

在第二个代码片段中,您将

result 
的当前值乘以
(N-r+i)
,然后在
result
的值更新后。然后,您获取更新后的结果,然后将其除以
i
。您正在执行操作
result = (result * (N-r+i)) / i;

因此,在第一个代码片段中,您将更新

result
一次,在第二个代码片段中,您将更新
result
两次。

© www.soinside.com 2019 - 2024. All rights reserved.