我试图实现一个简单的组合功能
private int combination(int n, int k)
{
if(n>>1 < k)
k = n - k;
double mul = 1;
for(int i=n+1-k;i<n+1;i++)
mul *= i;
for(int i=k;i>0;i--)
mul /= i;
return (int)mul;
}
当我输入参数时combination(33,17)
,它给了我1166803109,尽管正确的数字应该是1166803110。所以我在截断为 int 之前打印了mul
变量,它给了我一个十进制数:1.1668031099999998E9,这让我很困惑。根据定义,它应该是一个完美的除法,为什么它给我一个小数?