题目如下
一开始觉得挺简单的,但是就是得不到正确的答案
一开始写的代码如下
#include <stdio.h>
int main()
{
int m,n,k;
float a=1.0,b=1.0,c=1.0;
scanf("%d%d",&m,&n);
for(;m>0;m--)
a=a*m;
for(;n>0;n--)
b=b*n;
for(k=1;k<=(m-n);k++)
c=c*k;
printf("%f",1.0*a/(b*c));
return 0;
}
左看右看没问题啊 ,但是就是得不到正确答案。
后来调试了一下,发现最后c的值还是1。现在就看第三个循环 。 这时会发现m和n在前两次循环中都变成0了。
只需在输入m,n后把m-n的值存下来即可:
#include <stdio.h>
int main()
{
int m,n,k,h;
float a=1.0,b=1.0,c=1.0;
scanf("%d%d",&m,&n);
h=m-n;
for(;m>0;m--)
a=a*m;
for(;n>0;n--)
b=b*n;
for(k=1;k<=h;k++)
c=c*k;
printf("%f",1.0*a/(b*c));
return 0;
}
官方写的函数如下 更简单,更直观