当前位置: 代码迷 >> C语言 >> [求助] 求阶乘的函数为什么结果总是零
  详细解决方案

[求助] 求阶乘的函数为什么结果总是零

热度:333   发布时间:2007-08-17 16:56:33.0
[求助] 求阶乘的函数为什么结果总是零
#include<stdio.h>
#include<math.h>
float fac(int k)
{int t=1,i;
for(i=2;i<=k;i++)
t*=i;
return t;
}
main()
{ int m,n;
float c;
printf("Input m,n:");
scanf("%d,%d",&m,&n);
c=fac(m)/(fac(n)*fac(m-n));
printf("m!=%d n!=%d cmn zhi wei:%f\n",fac(m),fac(n),c);
getch();
return 0;
}
搜索更多相关的解决方案: fac  函数  阶乘  int  float  

----------------解决方案--------------------------------------------------------
刚好做题时写了一个,计算结果保存在s数组中,n<=1000时保证结果精确
#include<math.h>
int s[3000];
int main(void)
{
int i,j;
int n;
int x=2999;
s[x]=1;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
for(j=2999;j>=x;j--)
s[j]*=i;
for(j=2999;j>=x-3;j--)
{
s[j-1]+=s[j]/10;
s[j]=s[j]%10;
}
for(j=0;j<3000;j++)
if(s[j]) break;
x=j;
}
return 0;
}
----------------解决方案--------------------------------------------------------

问题:
数据类型混乱!
  那你所有int改成float,就没问题了!


----------------解决方案--------------------------------------------------------
刚学c,版主的有点难懂。三楼说的正确,为什么会出现这种情况呢?
----------------解决方案--------------------------------------------------------

#include<stdio.h>
#include<math.h>
float fac(int k)
{int t=1,i;
for(i=2;i<=k;i++)
t*=i;
return t;
}
main()
{ int m,n;
float c;
printf("Input m,n:");
scanf("%d,%d",&m,&n);

c=fac(m)/(fac(n)*fac(m-n));
printf("m!=%.0f n!=%.0f cmn zhi wei:%f\n",fac(m),fac(n),c);
getch();
return 0;
}
这样改就好了


----------------解决方案--------------------------------------------------------
还是提但是用高精度算法,像版主那样

不然无论是float还是double都有溢出的时候~~~~~而且数字表示不够精确

[此贴子已经被作者于2007-8-17 17:49:04编辑过]


----------------解决方案--------------------------------------------------------
楼上说的有道理!
----------------解决方案--------------------------------------------------------
溢出
----------------解决方案--------------------------------------------------------
Thank you
----------------解决方案--------------------------------------------------------
孔明的太高深了``下来好好看看```
----------------解决方案--------------------------------------------------------
  相关解决方案