2012-02-23 72 views
0

如何在c中實現一個程序來計算2^999?在C編程中計算一個很長的數字

+1

查找一個[BIGNUM庫](http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic#Libraries)。 – Mysticial 2012-02-23 19:34:39

+1

你不需要爲此編寫一個程序,結果是3005中的5.35754304×10。完成。 – 2012-02-23 19:35:59

+1

@VladLazarenko - 你如何得出這個結論? – Illusion03 2012-02-23 19:38:20

回答

5

你需要使用一個大的整數庫,它可以處理任意大小的數組。 GMP很受歡迎:http://gmplib.org/

如果您願意犧牲精確度,您可以使用double,只需使用pow()(2^999 =〜5.4 * 10^300)即可表示值高達約1.8 * 10^308。

+1

+1有趣的網頁,希望我永遠不需要使用它:) – Dampsquid 2012-02-23 19:36:14

+0

@Dampsquid:你在說什麼... GMP文檔是完全可以使用的,它是一個很好的庫... – 2012-02-23 19:38:03

+0

我確定它的意思是,我的意思是我希望我永遠不必計算有效數字的水平,爲我加倍衝浪。 – Dampsquid 2012-02-23 19:39:58

4
#include <math.h> 

double a = pow(2, 999); 
+4

...受C適當執行:-) – 2012-02-23 19:38:31

1
printf("%.0f\n", 0x1p999); 

哎呀,太短所以加入一些隨機的文字..

1

bc有內置的一個BIGNUM庫,是每一個Unix兼容的系統名副其實的。

#include <stdio.h> 

main() { 
    FILE *p; 

    p=popen("bc","w"); 
    fprintf(p, "2^999\n"); 
    fflush(p); 
    fclose(p); 
    exit(0); 
} 
+1

聖牛,夥計..真的嗎?爲什麼不寫一個shell腳本呢? – 2012-02-24 01:18:02

+1

@VladLazarenko:因爲OP要求C中的程序... – tomlogic 2012-02-24 16:34:03

2
#include <stdio.h> 
#include <string.h> 

void mul2(char *n){ 
    int c = 0; 
    while(*n){ 
     int v; 
     v = c + (*n - '0') * 2; 
     c = v/10; 
     *n++ = v % 10 + '0'; 
    } 
    if(c) *n++ = c + '0'; 
    *n = '\0'; 
} 

void print(char *n){ 
    strrev(n); 
    printf("%s\n", n); 
} 

int main (void){ 
    char num[302] = "1"; 
    int i; 
    for(i=0;i<999;i++) 
     mul2(num); 
    print(num); 
    return 0; 
} 
+0

302:(((log10 2)* 999)綜合爲301)+ 1(對於'\ 0') – BLUEPIXY 2012-02-23 22:06:42