首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言大數斐波那契數列:字符串模擬避免 malloc 卡死

     編輯:程式設計疑難解答

問題

用 int* 數組存儲大整數,malloc/realloc 頻繁分配導致程序在 800 多位時卡死。

優化:字符串高精度加法

void add(char a[], char b[], char res[]) {
    int lena=strlen(a), lenb=strlen(b);
    int len = (lena > lenb ? lena : lenb) + 1;
    char c[1200] = {0};
    for (int i=1; i<=lena; i++) c[i] += a[lena-i]-'0';
    for (int i=1; i<=lenb; i++) c[i] += b[lenb-i]-'0';
    for (int i=1; i<=len; i++) {
        if (c[i] > 9) { c[i] -= 10; c[i+1]++; }
    }
    while (len>1 && c[len]==0) len--;
    for (int i=0; i<=len; i++) res[i] = c[len-i] + '0';
    res[len+1] = '\0';
}

int main() {
    char a[1200]="1", b[1200]="1", c[1200];
    int i=3;
    while (1) {
        add(a,b,c);
        if (strlen(c) >= 1000) break;
        strcpy(a,b); strcpy(b,c);
        i++;
    }
    printf("%d\n%s\n", i, c);
}

優勢

  • 靜態數組避免動態內存分配開銷與碎片。
  • 字符串模擬手工列豎式加法,邏輯清晰、無上限(視數組大小)。
  • 運行極快,毫秒級得出首個 1000 位斐波那契數項數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved