int main()
{
int n = 0;
int *n_in = &n;
int r = 0;
int *r_in = &r;
unsigned long result1= 0;
unsigned long result2 = 0;
unsigned long *result1_out = &result1;
unsigned long *result2_out = &result2;
input(&n,&r);
fact(&n,&r);
find_nPr(&n,&r,&result1);
find_nCr(&n,&r,&result2);
output(&result1,&result2);
}
void input(int *n_in ,int *r_in)
{
printf("Enter the values of n and r: ");
scanf("%d %d",n_in,r_in);
}
unsigned long fact_n(int *n_in)
{
long result_n = 1;
for(int i = 1;i < *n_in;i++)
{
result_n= result_n*i;
}
return result_n;
}
unsigned long fact_r(int *r_in)
{
long result_r = 1;
for(int i = 1;i < *r_in;i++)
{
result_r= result_r*i;
}
return result_r;
}
unsigned long fact(int *n_in,int *r_in)
{
long result = 1;
for(int i = 1;i < (*n_in - *r_in);i++)
{
result= result*i;
}
return result;
}
unsigned long find_nPr(int *n_in,int *r_in,unsigned long *result1_out)
{
*result1_out = fact_n(n_in)/fact(n_in,r_in);
return *result1_out;
}
unsigned long find_nCr(int *n_in,int *r_in,unsigned long *result2_out)
{
*result2_out = fact_n(n_in)/(fact_r(r_in)*fact(n_in,r_in));
return *result2_out;
}
void output(unsigned long *result1_out,unsigned long *result2_out)
{
printf("nPr : %lu\n",*result1_out);
printf("nCr : %lu\n",*result2_out);
}
所以我使用了多种功能。 我对n,r和n-r使用了3个单独的阶乘函数。 我的代码没有错误.....我认为我的阶乘函数有问题。 我如何在一个函数中实现所有阶乘,大部分函数都使用无符号长。 条件是在主要功能中不要使用printf或scanf,并且必须有单独的输入和输出功能。 请帮助
答案 0 :(得分:0)
要计算n!
,您需要从1
循环到n
。但是您的循环上限为n-1
。
更改循环限制。
unsigned long fact_n(int *n_in)
{
long result_n = 1;
for(int i = 1;i <= *n_in;i++) // <= added
{
result_n= result_n*i;
}
return result_n;
}
unsigned long fact_r(int *r_in)
{
long result_r = 1;
for(int i = 1;i <= *r_in;i++) // <= added
{
result_r= result_r*i;
}
return result_r;
}
unsigned long fact(int *n_in,int *r_in)
{
long result = 1;
for(int i = 1;i <= (*n_in - *r_in);i++) // <= added
{
result= result*i;
}
return result;
}