【求助】數列求值程式



贊助商連結


wpeter
2004-03-15, 06:52 PM
 最近接觸到加泰隆尼亞數列(Catalan Number),為了要比較方便來使用,
於是想要用C﹢﹢來寫一個程式算出N項內的所有數以及第N項的值。
 加泰隆尼亞數列的求值式是(2n)!/(n!(n+1)!),其中N屬於自然數。我目前
是卡在不知道階層到底要怎樣用C來寫,知道的人希望可以敎一下。我
大致把我目前想出來的程式架構寫在下面(求第N項值),另外N項內的所有
數值,應該是要用For 迴圈來寫……
====================================================================
#include <stdio.h>
void main(void)
{
int n,ans; //Define two integers for input and output.
printf("Please input N for Catalan number:");
scanf("%d",&n);
ans=(2n)!/(n!(N+1)!)
printf("%d",ans);
}
====================================================================
 這篇不知道要貼在哪裡好。如果有不妥的煩請版主幫忙搬移一下……

贊助商連結


k0281
2004-03-15, 11:30 PM
電研教到這些了嗎!?
最近想跳到程設組去......現在看到你問這個問題......實在是讓我覺得現在過去會不會進度嚴重落後......

alec5106
2004-03-16, 01:05 AM
如果你用長整數或整數都只能處理到十位數(13!)以下(,用double也只能處理到17位有效位數,頂多只能到23!,所以

只果你先算階乘,那只能算到n=11 ==> 2n!=22! 再來就超過有效位數了.

這道題是要用些技巧,
例如
1.先把能約分去掉再來算.
2.不能只先算乘再算除.要乘一次,除一次,這樣可求的N值才會較大.但仍有上限.

dou0228
2004-03-16, 01:31 AM
你的解題方向不應該擺在如何寫 ! 上面..
而應該放在如何在 ! 之前就先把數字去掉..

這樣算起來才不會很快就 over flow 了..

想好了不須要算 "!" 的做法, 才是考慮如何實作大數(BigInteger)

wpeter
2004-03-16, 04:39 PM
 電研沒有教這個啦!不用太緊張。這是我們班同學的一個科展題目,這個程式的目的只是要幫他們比
較快速的計算出幾個數值,他們利用遞迴會比較方便。
 應該不需要處理到太多的項數,頂多算到第十項就差不多了,只是為了方便看它能不能適用於遞迴定
律罷了。難道真的沒有什麼函式可以寫階層嗎?

dou0228
2004-03-16, 06:39 PM
自己寫一個有這麼困難嗎?
不考慮 performance / overflow 不過就幾行而已呀..