| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1457 人关注过本帖
标题:求1!+2!....+20!
只看楼主 加入收藏
wonderyude
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-4-16
收藏
 问题点数:0 回复次数:10 
求1!+2!....+20!

怎么求1!+2!....+20!啊
高手快来啊  

搜索更多相关主题的帖子: 手快 
2007-04-19 11:46
YANGDAN123
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2007-1-16
收藏
得分:0 
这个挺简单的,老谭书上的练习,lz不妨自己想想!

我将用我全部的时间去寻找我生命和灵魂的唯一伴侣,得之,我幸,不得,我命。
2007-04-19 11:47
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
n>1时n!=n*(n-1)!;
n=0或n=1时n!=1;


雁无留踪之意,水无取影之心
2007-04-19 12:07
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
收藏
得分:0 

我也同意楼上的看法,给个程序你参考吧。
#include <stdio.h>

double jiecheng(int i);

int main(void)
{
int i,n;
double sum=0;

printf("please input the number n:");
scanf("%d",&n);

for (i=1;i<=n;i++)
sum+=jiecheng(i);
printf("1!+2!+.....+%d!=%lf\n",n,sum);
return 0;
}

double jiecheng(int i)
{
int j;
double sum=1;
for (j=1;j<=i;j++)
sum*=j;
return sum;
}


~~我的明天我知道~~
2007-04-19 12:35
wen1000
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2007-4-5
收藏
得分:0 

我用的是4楼的方法
可以执行
但当n输入1时 执行结果:1!+2!.....1!=1.000000
等号左边看起来很怪

2007-04-19 13:18
spider1987
Rank: 1
等 级:新手上路
帖 子:172
专家分:0
注 册:2007-2-18
收藏
得分:0 
你自己把等号左边改一下不就行了......
2007-04-19 13:54
沙漠水手
Rank: 2
等 级:论坛游民
帖 子:69
专家分:40
注 册:2007-3-17
收藏
得分:0 
s=1;t=1;m=0;
while(s<=20)
{t=s*t;
m+=t;
s++;}
2007-04-19 16:21
mayudong1
Rank: 2
等 级:论坛游民
威 望:1
帖 子:348
专家分:21
注 册:2006-4-18
收藏
得分:0 

#include<stdio.h> /*注释,对算法可能还表达还不是很完全*/
#define N 2500 /*为了方便,把两个空间设为一样大,可以调整,以提高速度。不一定*/
long int a[N]={0}; /*运算阶乘的空间*/
long int b[N]={0}; /*盛放最后的结果*/
long int m; /*特殊算法产生的中间量,表示进位*/
long int g=0; /*输入的数*/
main()
{
headprint(); /*调用头输出*/
yunsuan(); /*运算*/
print(); /*输出*/
}

/***********头输出文件,声明作者版权,采集少量数据*******/
int headprint()
{
printf("Thanks to use this software!\n");
printf("It can help you to finish the following function:\n");
printf("F(n)=1!+2!+3!+......+(n-1)!+n!\n"); /*以上皆是友情提示*/
printf("Please enter the n:\n");
scanf("%ld",&g);
getchar(); /*核心*/
printf("running........\nPlease wait!\n");
}

/*********计算程序部分************/
int yunsuan()
{
int i,j;
for(i=1;i<=g;i++) /*运 算 主 循 环 */
{
if(i<g) /*up*/
printf("run %d\r",i); /*显示当前运行的数据,主要是有点慢,等得不耐烦,就加了这个显示*/
if(i==g) /*up与down之间的这一段,是为了显示,与运算无关*/
printf("Finish %d\n",i); /*down*/
jiecheng(&i); /*调用阶乘计算*/
qiuhe(); /*调用求和运算*/
}

}

/*******计算阶乘*******/
int jiecheng(int *p)
{
int i,j;
for(i=0;i<N;i++) /*把运算空间清零,防止造成错误*/
a[i]=0;

a[N-1]=1; /* 阶乘空间第一位(在数组中就是最后一位了)初始化为1,,要不然就没办法阶乘了,都是零*/

for(i=1;i<=*p;i++) /*阶乘主循环*/
{
for(j=N-1;j>=0;j--) /*每一位都乘阶乘数*/
{
if(a[j]!=0||m!=0||a[j-1]!=0) {
a[j]=i*a[j]+m; /*m:前一组数据传过来的进位*/
m=0; /*进位清零,其数据已经加入到数组数据中*/
if(a[j]>9999) /*为了防止数据溢出,因为乘法会产生很大数,保守起见设最大数为9999*/
{
m=a[j]/10000; /*将超过的数据放在m中*/
a[j]=a[j]%10000; /*取出数据中除去超出范围的数后,剩余的数*/
}
}
}

}

}

/*********把结果求和*****/
int qiuhe()
{
int i,j;
for(i=N-1;i>=0;i--) /*求和主循环*/
{
b[i]=b[i]+a[i]+m; /*过程与阶乘相似,不过这次是加法了*/
m=0;
if(b[i]>9999) /*为了保证加法时不会错位,只好把b的最大数也设成9999了*/
{
m=b[i]/10000;
b[i]=b[i]%10000; /*一样*/
}
}
}

/**********输出部分********/
int print()
{
int i,j;
FILE *fp;
if((fp=fopen("001.txt","w"))==NULL) /*打开文件*/
printf("Can't open this file!\n");
for(i=0;i<N;i++)
if(b[i]) break;
for(;i<N;i++) /*此时就不用再设定i值了*/
{
printf("%ld",b[i]); /*输出到显示器*/
fprintf(fp,"%ld",b[i]); /*输出到文件*/
}
fclose(fp); /*关闭文件,经常忘了~嘿嘿~*/
printf("\n\nThe file '001' has been outputted!\n\n"); /*提示*/
getchar();
}




以前有人发的,被我保存了,是大数的阶乘,算20的是绰绰有余了。


2007-04-19 16:25
fhvt
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-4-3
收藏
得分:0 

递归函数做一个输出s=1!+2!+3!+4!+...+n!的程序

#include<stdio.h>
long sky(int n)
{
int s;
if(n==1) s=1;
else s=n*sky(n-1);
return(s);
}
void main()
{
long n,i,s;
s=0;
scanf("%d",&n);

for(i=n;i>=1;i--)
s+=sky(i);
printf("%d\n",s);
}

2007-04-19 17:21
yjh8656
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2007-3-6
收藏
得分:0 

[此贴子已经被作者于2007-4-19 19:49:03编辑过]

2007-04-19 19:41
快速回复:求1!+2!....+20!
数据加载中...
 
   



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

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