| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 45809 人关注过本帖
标题:求1!+2!+3!+4!+……+20!
只看楼主 加入收藏
嗜血鹦鹉
Rank: 1
等 级:新手上路
帖 子:2
专家分:1
注 册:2009-9-24
收藏
得分:0 
回复 23楼 li151312595
由于输出的数太大,定义int范围只在-32768到32767,跟本不够用,float就可以了,它范围是-3.4乘以10的-38次方到3.4乘以10的38次方

我要编程
2009-09-27 22:13
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
刚好写过一个这样的.改N就可以了.基本可以秒出.

#include <stdio.h>   
#include <stdlib.h>   
 
#define N 20    //要计算的N   
#define P 10000  
long s[N]={1,1},a=1,b=0;  
 
void factorial(long s[],long n)  
{  
for(;a<=*s;)   
    {   
     b+=s[a]*n;   
     s[a]=b%P;   
     b/=P;   
     if((*s==a)&&b)   
       (*s)++;   
     ++a;   
    }  
b=0,a=1;  
}   
 
void add(long sum[],long s[])  
{  
 int i;
for(i=1;i<=s[0];++i)  
    if((sum[i]+=s[i])>9999) {sum[i]%=10000,sum[i+1]++;}  
}  
 
int main()  
{   
int i=2;  
long sum[N]={1,1};  
for(;i<=N;factorial(s,i),add(sum,s),++i);  
printf("%d",sum[s[0]]);  
for(i=s[0]-1;i>0;printf("%04d",sum[i]),--i);   
putchar('\n');  
system("pause");   
return 0;   
}

2009-09-28 08:27
mohao163
Rank: 5Rank: 5
来 自:南宁
等 级:职业侠客
威 望:2
帖 子:79
专家分:383
注 册:2009-9-25
收藏
得分:0 
呵呵,你们再试试做100!试试,用链表做
2009-09-28 08:57
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
回复 33楼 mohao163
9332621544394415268169923885626670049071596826438162146859296389521759999322991560894146397615651828
6253697920827223758251185210916864000000000000000000000000


100!
2009-09-28 09:19
beyond_one
Rank: 4
等 级:业余侠客
帖 子:61
专家分:206
注 册:2009-6-26
收藏
得分:0 
/*求1!+2!+3!+4!+......+20!的值*/
#include<stdio.h>
main()
{
int i,j;
float k,sum;
for(i=1;i<=20;i++)
{
k=1;
for(j=1;j<=i;j++)
{
k=k*j;
}
sum+=k;
}
printf("1!+2!+3!+4!+......+20!=%f\n",sum);
getch();
}

结果:458284170950269045000000000000.000000
2009-09-28 10:05
evanya
Rank: 2
等 级:论坛游民
帖 子:31
专家分:45
注 册:2009-9-28
收藏
得分:0 
用递归函数也可以的,如下:
#include "stdio.h"
double fun(double n)
{
    double f;
    if(n<0)printf("Data Error!");
    else if(n==0||n==1)f=1;
    else
    f=fun(n-1)*n;
    return(f);
     
    }
void main()
{
   
  double k=0,i=1;
  do{
      k+=fun(i);
      i++;
  }while(i<=20);
  printf("%f",k);  
}
2009-09-28 13:57
wzywsk
Rank: 1
等 级:新手上路
帖 子:5
专家分:1
注 册:2008-3-8
收藏
得分:0 
以下是引用cxg8790809在2009-9-26 14:56:17的发言:

指出一个错误;这位朋友编的程序中;
k=1;要放到第一个循环体中 ;
貌似sum变量要设为long型吧~~
2009-09-28 17:39
无情雪狐
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2009-9-9
收藏
得分:0 
唉,要有针对性呀!!!
2009-09-28 19:07
qintian0125
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2009-9-28
收藏
得分:0 
#include<stdio.h>
double f(int n)
{
    if(n==1)return 1;
    else
       return (n*f(n-1));
}
void main()
{
    double  sum=0;
    int i;
     for(i=1;i<21;i++)
        sum+=f(i);
       printf("%f",sum);
       getch();
}这个数太大,可以用以上程序,但结果是实型的,你自己去看看吧!
2009-09-28 20:05
已屏蔽
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:89
专家分:124
注 册:2009-9-5
收藏
得分:0 
实数的精度只有16位吧,也不精确的


ms 32楼可行。。。?
2009-09-28 20:54
快速回复:求1!+2!+3!+4!+……+20!
数据加载中...
 
   



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

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