| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1337 人关注过本帖
标题:一个求N!的问题~ 请教下思路
只看楼主 加入收藏
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
看你要不要完整的数了。
随便写了个
# include <stdio.h>
# define MaxLen 1000000ul

char Result [MaxLen] = { 1 };
long Bit;

void Factorial ( long num ) {
     long temp, i;
     while ( num >= 2 ) {
            for ( temp = 0 , i = 0 ; i <= Bit ; i++ ) {
                       temp = *( Result + i ) * num + temp;
                       *( Result + i ) = temp % 100;
                       temp /= 100;
              }
           for ( ;  temp > 0 ; temp /= 100 ) *( Result + ( ++Bit ) ) = temp % 100;
           num--;
     }
}

void Print ( ) {
    for ( printf ( "%ld" , *( Result + Bit ) ) ; --Bit >= 0 ; )
          printf ( "%02ld" , *( Result + Bit ) );
}

int main ( ) {
    long num;
    scanf ( "%ld" , &num );
    Factorial ( num );
    Print ( );
    system ( "pause" );
    return 0;
}

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-08-28 20:24
忆馨亦伊
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-8-26
收藏
得分:0 
/*     
   
          本程序对给定的n(n<=100),计算出输出k!(k=1,2,...,n)的全部有效数字,因k!的值可能很大,故采用一维数组存储计算结果。设数组的每个元素存储k!的一位数字,并约定从低位到高位依次存于数组的第一个位置,第二个位置···。   
  程序中,计算k!采用对已求得的(k-1)!的结果连续加k-1次后求出,例如,4!=24,则计算5!对原来的24累加4次后得到120。为了控制累加的位数,另引入整型变量c用于记录当前(k-1)!的位数。   
   
  */   
  #include   <stdio.h>   
   
  #define   MAXN   1000   
   
  int   a[MAXN],   b[MAXN];   
   
  void   pnext(int   k,   int   *cp)   
  {   
  int   c   =   *cp,   i,   m,   r;   
  for   (i   =   0;   i   <   c;   i++)   
  b[i]   =   a[i];   
  a[c]   =   0;   
  for   (m   =   1;   m   <   k;   m++)   
  for   (i   =   0;   i   <   c;   i++)   {   
  r   =   a[i]   +   b[i];   
  a[i]   =   r   %   10;   
  a[i   +   1]   +=   r   /   10;   
  }   
  r   =   a[c];   
  while   (r   >   0)   {   
  a[c++]   =   r   %   10;   
  r   =   r   /   10;   
  }   
  *cp   =   c;   
  }   
   
  void   write(int   *a,   int   k,   int   c)   
  {   
  int   i;   
  printf("%4d!   =   ",   k);   
  for   (i   =   c   -   1;   i   >=   0;   i--)   
  printf("%d",   a[i]);   
  printf("\n\n");   
  }   
   
  main()   
  {   
  int   n,   c,   k;   
  printf("Enter   the   number   n(<=100):");   
  scanf("%d",   &n);   
  a[0]   =   1;   
  c   =   1;   
  write(a,   1,   c);   
  for   (k   =   2;   k   <=   n;   k++)   {   
  pnext(k,   &c);   
  write(a,   k,   c);   
  getchar();   
  }   
  }
2008-08-28 21:47
gxd808
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-8-27
收藏
得分:0 
我是个新手,还不是很明白啊~

能说的再详细些吗?谢谢了。
2008-09-01 22:47
寒秋
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2008-4-19
收藏
得分:0 
#include<stdio.h>
#define BASE 10000
#define UNIT 4

int m,len,ans[1000000];

void multiplay(int number)
{
    int i,x,y=0;
    for(i=0;i<len;i++)
    {
        x=ans[i]*number+y;
        ans[i]=x%BASE;
        y=x/BASE;
    }
    while(y>0)
    {
        ans[len++]=y%BASE;
        y/=BASE;
    }
}


int main()
{
    int i,n;
    while(scanf("%d",&n)!=EOF)
    {
        ans[0]=len=1;
        for(i=2;i<=n;i++) multiplay(i);
        printf("%d",ans[len-1]);
        for(i=len-2;i>=0;i--) printf("%0*d",UNIT,ans[i]);
        putchar('\n');
    }
    return 0;
}
2008-09-02 11:08
yk19880525
Rank: 1
来 自:江汉大学
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-5-5
收藏
得分:0 
用递归   这经典的方法   比如n!=n*(n-1)!   用一个函数就可以了
2008-09-02 12:15
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
看看燕子的大数乘程序

学习需要安静。。海盗要重新来过。。
2008-09-02 13:28
快速回复:一个求N!的问题~ 请教下思路
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014808 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved