当前位置: 代码迷 >> C语言 >> [求助]300!
  详细解决方案

[求助]300!

热度:295   发布时间:2005-05-11 18:33:00.0
[求助]300!
计算300的阶乘??~~~

谢!!!
----------------解决方案--------------------------------------------------------
方法倒是很简单,但是结果肯定非常非常大。

试问用什么类型来装结果呢?
----------------解决方案--------------------------------------------------------

对于n<=170的整数都可以. #include<stdio.h> #include<conio.h>

double fact(long n) { double fac; if(n==0) fac=1; else fac=n*fact(n-1); return fac; }

void main( ) { long n; printf("Input n:"); scanf("%ld",&n); printf("%ld!=%.0lf\n",n,fact(n)); getch( ); } 但对于大于170的整数整数则要应用字符串来解. 具体如何解有点思路,但是实习时出了点问题.以后再看吧.


----------------解决方案--------------------------------------------------------
要精确解~~
----------------解决方案--------------------------------------------------------
我自己编了一个
大家看看
#include&lt;iostream.h&gt;
#define N 100000
int main()
{
int a[N],m,n,i,j,w;
a[0]=1;
for(i=1;i&lt;N;i++)
  a[i]=0;
cout&lt;&lt;"计算n!,请输入n"&lt;&lt;endl;
cin&gt;&gt;n;
for(i=1;i&lt;=n;i++)
{
  w=0;
  for(j=0;j&lt;N;j++)
  {
   a[j]=a[j]*i+w;
   w=0;
   if(a[j]&gt;=10)
   {
    w=a[j]/10;
    a[j]=a[j]%10;
   }
  }
}
for(i=N-1;i&gt;=0;i--)
{
  if(a[i]!=0)
  {
   m=i;
   cout&lt;&lt;"共"&lt;&lt;m&lt;&lt;"位"&lt;&lt;endl;
   break;
  }
}
cout&lt;&lt;n&lt;&lt;"!为: "&lt;&lt;endl;
for(i=m;i&gt;=0;i--)
  cout&lt;&lt;a[i];
cout&lt;&lt;endl;
return 0;
}
----------------解决方案--------------------------------------------------------
你需要一个大数乘运算历程。
----------------解决方案--------------------------------------------------------
高精度 大整数相乘 用int数组存放结果撒
----------------解决方案--------------------------------------------------------
  相关解决方案