2012-02-23 10 views
0

2^999を計算するためにcでプログラムを実装する方法は?Cプログラミングで非常に長い数値を計算する

+1

[BIGNUMライブラリ](http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic#Libraries)を探します。 – Mysticial

+1

プログラムを書く必要はありません。結果は5.35754304×10 in 300です。完了。 –

+1

@VladLazarenko - あなたはその結論にどのように達しましたか? – Illusion03

答えて

5

任意のサイズの配列で動作する大きな整数ライブラリを使用する必要があります。 GMPは普及している:http://gmplib.org/

精度を犠牲にしたい場合は、pow()(2^999 =〜5.4 * 10^300)を使用するだけで、約1.8 * 10^308までの値を表すdoubleを使用できます。

+1

興味深いWebページ+1、私はそれを使う必要はないと思っています;) – Dampsquid

+0

@Dampsquid:あなたはどういうことを言っていますか?GMPのドキュメントは完全にサービス可能で、それは良いライブラリです... –

+0

確信していますそれは、私が重要な数字のレベルに計算を行う必要がないことを望み、私のためにサーフィスを2倍にすることを意味します。 – Dampsquid

4
#include <math.h> 

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

... Cの適切な実装の対象: –

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

聖なる牛、おい...本当に?なぜシェルスクリプトを書かないのですか? –

+1

@VladLazarenko:OPはC言語のプログラムを要求したので... – tomlogic

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

関連する問題