C語言,大數運算,階層筆記

如果今天要用C語言計算50!,int都是不夠用的。 要解這樣的問題,必需要用陣列。
 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

留言

這個網誌中的熱門文章

Raspberry Pi (ARMv6)上自幹一個微小作業系統

Linux VLAN 筆記