关于复合的赋值运算符

来源:百度知道 编辑:UC知道 时间:2024/05/22 15:58:36
int a=1;
int b=1;
for(int i=1;i<=k;i++)
{
a=a*(n-i+1)/i;
b*=(n-i+1)/i;
}
最后a和b的值为什么不相等,如当k=2,n=4时最后会输出a=6,b=4
改成a=a*((n-i+1)/i) 还是不一样啊
改成a=a*((n-i+1)/i) 一样了 刚才没保存就运行了

你改成a=a*((n-i+1)/i);应该就一样了。

不一样的原因是整数相除的截断小数的问题。
举个例子:
2*3/2=3
2*(3/2)=2

呵呵,当然不相等了啊
a的值是:先运算(n-i+1),再运算a*,最后运算 /i 除法
b的值是:先运算(n-i+1),再运算/i,最后运算b*
所以,不一样的
呵呵
好好学,努力啊