亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于階乘求和分析

? 今天老師出了一道題,要我們寫出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
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號