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_23628800
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
留言