使用c語言陣列計算 200 階層

從台大 ptt 上 Programming 版看到的,由 PaulLiu 所寫的程式版本,我在加上註解、整理縮排和小小修改之後,post 在這裡。

這個方式是使用陣列來存放整個計算的結果。

在使用 c 語言計算大數方面,除了像這樣使用陣列來處理之外,還有其他方法是連結另外專門處理大量的函式庫,像是 The GNU MP Bignum Library 或是 C++ 的 NTL 函式庫

#include <stdio.h>
int main() {
    int i,j,a[2048],N=200;
    //初始化陣列內容
    memset(a,0,sizeof(a));
    a[0]=1;
    for (i=1 ; i<=N ; i++)  {  //i 從 1 ~ 200 代表 1x2x3...x200
        //從最低位數開始計算新的結果
        for (j=0 ; j < sizeof(a)/sizeof(a[0]) ; j++) {
            a[j] *= i;
        }
        //處理數字進位
        for (j=0 ; j < sizeof(a)/sizeof(a[0])-1 ; j++) {
            a[j+1] += a[j]/10;
            a[j] %= 10;
        }
    }
    //準備列印出結果
    for (i=sizeof(a)/sizeof(a[0])-1 ; i >=0 ; i--) {
        if (a[i] != 0) break;
    }
    //印出計算完成的結果
    for ( ; i>=0 ; i--) {
        printf("%d",a[i]);
        printf("\n");
    }
}

在計算的效能方面,在台大 ptt Programming 版上, 有網友提供了一個網址,包含了幾個語言的測試數據,網址在這裡

2 回應 to “使用c語言陣列計算 200 階層”

  1. 小松鼠 說:

    請問memset這是什麼函式呀?

    a[j] *= i; (a[i]不會是0嗎?)

    可以請問這隻程式要改寫道java該怎麼寫呢?

    最近作程式邏輯的問題

    希望您可以幫幫我 謝謝

  2. GD 說:

    memset() 是c語言的一個函數,在這裡是用來將陣列 a 的 2048 個空間都設定為 0 (進行初始化)

    可以改為 java 版是沒有問題,只要了解 sizeof(a)/sizeof(a[0])的意思就可以改寫了

留言