另一種求大數階乘的演算法

2021-10-10 23:32:39 字數 1053 閱讀 4800

大數階乘

問題描述:編寫程式,對給定的n(n <= 100),計算並輸出k的階乘k!的全部有效數字。

注意:如果要求乙個5的階乘,用整型可以儲存,求10的階乘可以用長整型表示,但若要求100的階乘,就無法用長整型表示,此時就必須考慮別的方法。

要求的k!的值,必定已求得(k-1)!的值,依次地推,當 k = 2時,要求的1! = 1為已知。求得(k-1)!的值後,對(k-1)!連續累加k-1此後即可求得k!值。

例如:5!= 120,計算6!,可對原來的120累加5次120後得到720.

由於k!可能大大超出一般整數的位數,因此程式用乙個一維陣列儲存長整型,儲存長整數陣列的每個元素只儲存長整數的一位數字。如有m位長整數n用陣列a儲存,並用a[0]儲存長整數n的位數m,即a[0] = m。按上述約定,陣列的每個元素儲存k的階乘k!的一位數字,並從低位到高位依次存於陣列的第二個元素、第三個元素....

例如:6! = 720,在陣列中的儲存形式為:

a[0]       a[1]        a[2]     a[3]

3         0           2        7

a[0] = 3表示長整數是乙個3位數,接著從低位到高位依次是0、2、7,表示成整數720.

程式實現:

/*

*程式功能:計算任意位數的階乘

*作者blog:

*/#include #include #define maxn 1000

//已知a中的(k-1)!,求k!

void prenext(int a,int k)

if(carry) //向最高為進製

a[++m] = carry;

} free(b);

a[0] = m;

}void print(int *a,int k)

} printf("\n");

}void main()

}}

執行截圖:

另一種求大數階乘的演算法

大數階乘 問題描述 編寫程式,對給定的n n 100 計算並輸出k的階乘k 的全部有效數字。注意 如果要求乙個5的階乘,用整型可以儲存,求10的階乘可以用長整型表示,但若要求100的階乘,就無法用長整型表示,此時就必須考慮別的方法。要求的k 的值,必定已求得 k 1 的值,依次地推,當 k 2時,要...

另一種階乘問題

大家都知道階乘這個概念,舉個簡單的例子 5!1 2 3 4 5.現在我們引入一種新的階乘概念,將原來的每個數相乘變為i不大於n的所有奇數相乘例如 5 1 3 5.現在明白現在這種階乘的意思了吧!現在你的任務是求出1 2 n 的正確值 n 20 輸入 第一行輸入乙個a a 20 代表共有a組測試資料 ...

另一種階乘問題

描述 大家都知道階乘這個概念,舉個簡單的例子 5!1 2 3 4 5.現在我們引入一種新的階乘概念,將原來的每個數相乘變為i不大於n的所有奇數相乘例如 5 1 3 5.現在明白現在這種階乘的意思了吧!現在你的任務是求出1 2 n 的正確值 n 20 輸入 第一行輸入乙個a a 20 代表共有a組測試...