C语言程序设计题:编写函数根据公式求p,计算结果作为函数值返回。m与n为两个正整数,且m>n。在main函数中验证。要求:m和n在main函数中由键盘输入。p的计算公式如下:p=(m-n)!/n!
#include <stdio.h>
int fac(int n);
int fun(int m, int n);
void main()
{
int m, n;
while (1)
{
scanf_s("%d%d", &m, &n);
if(m>n)
break;
else
{
printf("输入有误,请重新输入\n");
continue;
}
}
printf("%d", fun(m, n));
}
int fac(int n)
{
if (n == 1)
return 1;
else
return fac(n - 1)*n;
}
int fun(int m, int n)
{
int p;
p =fac(m - n)/fac(n);
return p;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
#include <stdio.h>
// 计算阶乘
int factorial(int num) {
int res = 1;
for (int i = num; i > 1; i--) {
res *= i;
};
return res;
}
// 计算公式p
double eval(int m, int n) {
return factorial(m-n)*1.0/ factorial(n);
}
int main(void) {
int m, n;
// 读取整数m,n
scanf("%d", &m);
scanf("%d", &n);
// 调用eval函数,得到结果
printf("%f", eval(m, n));
return 0;
}
#include <stdio.h>
void swap(long long *a, long long *b)
{
long long t = *a;
*a = *b;
*b = t;
}
long long gcd(long long a, long long b)
{
if (a > b)
swap(&a, &b);
long long r = b % a;
if (r == 0)
return a;
return gcd(r, a);
}
long long f(int n)
{
long long r = 1;
for (int i = 2; i <= n; i++)
r *= i;
return r;
}
int main()
{
int m, n;
scanf("%d%d", &m, &n);
if (m <= 0 || n <= 0 || m <= n)
{
printf("requires m > 0 && n > 0 && m > n\n");
return 1;
}
long long a = f(m - n);
long long b = f(n);
long long d = gcd(a, b);
a /= d;
b /= d;
if (b == 1)
printf("%lld", a);
else
printf("%lld/%lld", a, b);
return 0;
}
$ gcc -Wall main.c
$ ./a.out
3 1
2
$ ./a.out
3 2
1/2