Dav*_*vid 5 c++ visual-studio-2010 visual-c++
看看这个功能:
int c(int n,int k) {
if (n<0 || k<0 || n<k) {
return 0;
}
int c=1,p=n-k,i=1;
while (n>p) {
c = c * n/i++; // <<<
n--;
}
return c;
}
Run Code Online (Sandbox Code Playgroud)
当我改变c=c*n/i++到c*=n/i++功能无法正常工作.例如c(4,2)= 4(= 6真)我跟踪:1.i ++ 2./3.*=和所有其他可能性但没有答案.为什么?
编辑:这不是我所知道的问题.我问为什么编译器回答的c(4,2)=4时候c*=n/i++.我跟踪*/++, *++/, /*++, /++*, ++*/, ++/*但回答不是4.什么是编译器的逻辑?(抱歉英语不好)
Som*_*ude 10
如果是
c = c * n / i++;
Run Code Online (Sandbox Code Playgroud)
你先乘c和n,然后除以它i,最后i增加.
当你这样做
c *= n / i++;
Run Code Online (Sandbox Code Playgroud)
你先分裂并增加i,然后做乘法.
换一种说法:
c = c * n / i++;
Run Code Online (Sandbox Code Playgroud)
等于
c = (c * n) / i++;
Run Code Online (Sandbox Code Playgroud)
而
c *= n / i++;
Run Code Online (Sandbox Code Playgroud)
等于
c = c * (n / i++);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3219 次 |
| 最近记录: |