求解C语言利用函数计算Cmn=(m!-n!)/(n!) 5

求大佬解答我哪里做得不对。... 求大佬解答我哪里做得不对。 展开
 我来答
duanggi
2019-05-25 · TA获得超过196个赞
知道小有建树答主
回答量:240
采纳率:87%
帮助的人:150万
展开全部
#include<stdio.h>
int prime[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 };
int len = 10;
int factors1[10];
int factors2[10];
void decompose(int* factors, int m, int n)
{
for (int i = 0; i < len; i++) factors[i] = 0;
for (int j = m; j <= n; j++)
{
int temp = j;
for (int t = 0; t < len; t++)
{
while (temp != 1 && temp % prime[t] == 0)
{
temp /= prime[t];
factors[t]++;
}
if (temp == 1) break;
}
}
}
void main()
{
int m, n;
int res;
while (~scanf("%d %d", &m, &n))
{
if (n > m)
{
int temp = n;
n = m;
m = temp;
}
int max, min;
if (n > m - n)
{
max = n;
min = m - n;
}
else
{
max = m - n;
min = n;
}
decompose(factors1, max + 1, m);
decompose(factors2, 2, min);
res = 1;
for (int i = 0; i < len; i++)
{
factors1[i] -= factors2[i];
for (int j = 0; j < factors1[i]; j++)
res *= prime[i];
}
printf("%d\n", res);
}
}

基本思路是因式分解,避免大数溢出

也可以把main函数改为这个,方便理解

因为 C(m,n)=m!/((m-n)!*n!),可以先将分母部分的n!约掉。

void main()
{
int m, n;
int res;
while (~scanf("%d %d", &m, &n))
{
if (n > m)
{
int temp = n;
n = m;
m = temp;
}
decompose(factors1, n + 1, m);
decompose(factors2, 2, m - n);
res = 1;
for (int i = 0; i < len; i++)
{
factors1[i] -= factors2[i];
for (int j = 0; j < factors1[i]; j++)
res *= prime[i];
}
printf("%d\n", res);
}
}
听不清啊
高粉答主

2019-05-25 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:2亿
展开全部
出错的地方比较多唉。首先是你提问的题目中公式写错了。其次是在程序代码中计算的公式也错了。最后一个问题是你要计算那么大数的阶乘,全部计算出来,肯定是会溢出的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式