为了账号安全,请及时绑定邮箱和手机立即绑定

关于阶乘求和分析

  今天老师出了一道题,要我们写出1~
20阶乘之和的代码,s=1!+2!+3!+……+18!+19!+20!想了半天没想到咋分析请教一下咩

正在回答

4 回答

时间仓促,我就没写注释了,如果哪里不懂可以继续问

0 回复 有任何疑惑可以回复我~
#1

慕哥3271118 提问者

谢谢你,我先睡觉了?再交流
2017-09-19 回复 有任何疑惑可以回复我~
#2

treehuang

我那个程序只要把int 改为long int ,把%d改为%ld就可以啦,递归的思想
2017-09-21 回复 有任何疑惑可以回复我~
#3

Wingrez 回复 treehuang

你好。应该使用64位及以上的整数类型,你的程序才能得出正确结果。在我的环境下,即使换成long int也是不对的,可以使用long long int。
2017-09-22 回复 有任何疑惑可以回复我~
#4

treehuang 回复 Wingrez

是啊,的确要64位,我的这个程序不够强壮哈哈哈
2017-09-22 回复 有任何疑惑可以回复我~
查看1条回复
#include<stdio.h>
#define MAXN 100
int ans[MAXN],num[MAXN];
int cnt_ans,cnt_num;

void add()
{
	int i;
	int jinwei=0;
	for(i=0;i<cnt_num;i++)
	{
		int temp=ans[i]+num[i]+jinwei;
		ans[i]=temp%10;
		jinwei=temp/10;
	}
	cnt_ans=cnt_num;
	if(jinwei>0)
	{
		ans[i]=jinwei;
		cnt_ans++;
	}
}

void  factorial(int n)
{
	int i;
	int jinwei=0;
	for(i=0;i<cnt_num;i++)
	{
		int temp=num[i]*n+jinwei;
		num[i]=temp%10;
		jinwei=temp/10;
	}
	if(jinwei>0)
	{
		num[i]=jinwei;
		cnt_num++;
	}
}

void print()
{
	int i;
	for(i=cnt_ans-1;i>=0;i--)
	{
		printf("%d",ans[i]);
	}
	printf("\n");
}

int main()
{
	int i;
	ans[0]=num[0]=1;
	cnt_ans=cnt_num=1;
	for(i=2;i<=20;i++)
	{
		factorial(i);
		add();
	}
	print();
}


0 回复 有任何疑惑可以回复我~

#include <stdio.h>


int fun(int i)

{

if(i == 1)

return 1;


return i * fun(i-1);

}


int main(void)

{

int i, sum = 0;


for(i=1; i<=20; i++)

{

sum = sum + fun(i);

}


printf("%d\n", sum);


return 0;

}


0 回复 有任何疑惑可以回复我~
#1

慕哥3271118 提问者

谢谢哒
2017-09-19 回复 有任何疑惑可以回复我~
#2

慕哥3271118 提问者

谢谢哒
2017-09-19 回复 有任何疑惑可以回复我~
#3

Wingrez 回复 慕哥3271118 提问者

他这个是不对的
2017-09-19 回复 有任何疑惑可以回复我~
#4

慕哥3271118 提问者 回复 Wingrez

我用C4droid运行了一下结果是268040729,但是我还是不晓得怎么分析过程
2017-09-19 回复 有任何疑惑可以回复我~
#5

treehuang 回复 慕哥3271118 提问者

对不起,程序的返回类型写错了,我现在更正一下 #include <stdio.h> long int fun(int i) { if(i == 1) return 1; return i * fun(i-1); } int main(void) { int i; long int sum = 0; for(i=1; i<=20; i++) { sum = sum + fun(i); } printf("%ld\n", sum); return 0; }
2017-09-21 回复 有任何疑惑可以回复我~
#6

treehuang 回复 Wingrez

#include <stdio.h> long int fun(int i) { if(i == 1) return 1; return i * fun(i-1); } int main(void) { int i; long int sum = 0; for(i=1; i<=20; i++) { sum = sum + fun(i); } printf("%ld\n", sum); return 0; }
2017-09-21 回复 有任何疑惑可以回复我~
查看3条回复

因为要计算到20的阶乘,结果值将非常大。所以可以用数组来保存数值的每一位。

0 回复 有任何疑惑可以回复我~
#1

慕哥3271118 提问者

可是不晓得咋分析变量特点
2017-09-19 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于阶乘求和分析

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号