十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
int function(int n,int m)
成都创新互联公司-云计算及IDC服务提供商,涵盖公有云、IDC机房租用、绵阳电信机房、等保安全、私有云建设等企业级互联网基础服务,欢迎联系:18982081108
{
int i, ret = 1;
for(i=0;im;i++)
ret *= (n-i);
return ret;
}
void main(void)
{
int n = 15, m =5;
int ret;
ret = function(15,5) / function(5,5);
printf("%d\n",ret);
}
实现的算法很多, 下面给出一个不需要递归的算法; 需要设计两个函数。
unsigned long factorial (unsigned long n);
long long perm(unsigned long m, unsigned long n);
unsigned long factorial (unsigned long n)
{
unsigned long value = (n == 0) ? 1 : n;
while( n = 2 )
value *= --n;
return value;
}
long long perm(unsigned long m, unsigned long n)
{
if (m n)
return -1;
else
return (unsigned long) (factorial(n)/factorial(n-m));
}
只为了mn就要返回-1, 有点浪费啊~~~
注意求值范围, 如果需要可以int64扩展。。。
double fact(long num)
{
for (long i = 1; num 0; num--)
{
i *= num;
}
}
int main()
{
long m;
long n;
long C;
scanf("%ld %ld", m, n);
C = fact(n) / ((fact(m)) * fact(n-m));
printf("%ld",C);
return 0;
}