【项目4-求阶乘函数】
(1)请输出满足条件n=a!+b!+c!的所有三位数n,其中,a、b、c分别是n的百、十、个位数。要求用自定义函数实现求阶乘。
int main()
{ }
long fac(int n) //用于求n的阶乘
{ }
[参考解答]
解法1:
#include<stdio.h>
int fact(int);
int main()
{
int n,a,b,c,sum;
n=100;
while(n<1000)
{
//考察n是否符合要求
c=n%10;
b=(n/10)%10;
a=n/100;
sum=fact(a)+fact(b)+fact(c);
if(sum==n)
printf("%d ", n);
++n;
}
printf("\n");
return 0;
}
int fact(int n) //在设计中,函数的功能尽可能单一,fact只管求阶乘
{
int i, f=1;
for(i=1; i<=n; ++i)
f=f*i;
return f;
}
解法2:构造循环的着眼点不同,我们还可以写出下面的程序,注意main()函数中的循环。
#include<stdio.h>
int fact(int);
int main()
{
int n,a,b,c,sum;
for(a=1; a<=9; ++a)
for(b=0; b<=9; ++b)
for(c=0; c<=9; ++c)
{
n=a*100+b*10+c;
sum=fact(a)+fact(b)+fact(c);
if(sum==n)
printf("%d ", n);
}
printf("\n");
return 0;
}
int fact(int n) //在设计中,函数的功能尽可能单一,fact只管求阶乘
{
int i, f=1;
for(i=1; i<=n; ++i)
f=f*i;
return f;
}
(2)求组合数:求组合数公式为:
![](https://img-my.csdn.net/uploads/201211/10/1352555984_8093.png)
编一程序,输入m和n的值,求组合数。要求分别定义求阶乘和求组合的函数,求组合数的函数调用求阶乘的函数来实现求解,在main()函数中,负责输入输出及调用求组合数的函数。
[参考解答]
#include<stdio.h>
int fact(int);
int main()
{
int m,n,c;
printf("求C(m,n),先输入m和n的值:");
scanf("%d %d", &m, &n);
if(m>=n)
{
c=fact(m)/(fact(n)*fact(m-n));
printf("组合数C(m,n)为:%d\n", c);
}
else
printf("m应该不小于n!\n");
return 0;
}
int fact(int n) //在设计中,函数的功能尽可能单一,fact只管求阶乘
{
int i, f=1;
for(i=1;i<=n;++i)
f=f*i;
return f;
}