C語言,大數運算,階層筆記
如果今天要用C語言計算50!,int都是不夠用的。
要解這樣的問題,必需要用陣列。
32位元系統unsigned int 最大 4,294,967,295 (10位數字)
64位元 uint64_t 18,446,744,073,709,551,615 (20 位數字)
3628800
3628800
000000000002432902008176640000
原始碼:
https://github.com/tzuCarlos/linux_C/blob/master/c_examples/factorial_2.c
reference source:
http://www.cs.utexas.edu/users/djimenez/utsa/cs3343/lecture20.html http://en.wikipedia.org/wiki/Integer_(computer_science)
http://en.wikipedia.org/wiki/Factorial
32位元系統unsigned int 最大 4,294,967,295 (10位數字)
64位元 uint64_t 18,446,744,073,709,551,615 (20 位數字)
/*從array的高位元開始存值*/ void Big_factorial_iteration(int n) { int i=1; /*init array*/ int a[SIZE_A]= {0}; int tail=SIZE_A-1; a[tail]=1; for(i=1; i <= n ; i++) { int j; /* multiply the value */ for(j= tail ; j >= 0 ; j--) { a[j]=a[j]*i; } /*進位留下個位數,其餘的加點前一位 */ for(j= tail ; j >= 0 ; j--) { if (a[j] >= 10) a[j-1]=a[j-1]+(a[j]/10); a[j]=a[j]%10; } } for(i=0; i< SIZE_A ; i++) { printf("%d",a[i]); } printf("\n"); } int main() { printf(" %d \n",factorial_recursion(10)); printf(" %d \n",factorial_iteration(10)); Big_factorial_iteration(20); 計算20階層 }result: [carlos@localhost c_examples]$ ./factorial_2
3628800
3628800
000000000002432902008176640000
原始碼:
https://github.com/tzuCarlos/linux_C/blob/master/c_examples/factorial_2.c
reference source:
http://www.cs.utexas.edu/users/djimenez/utsa/cs3343/lecture20.html http://en.wikipedia.org/wiki/Integer_(computer_science)
http://en.wikipedia.org/wiki/Factorial
留言