web-dev-qa-db-ja.com

Cで大きな数を保存して操作する

非常に大きな数を扱うのに助けが必要です。 Windowsの計算によると、指数

174^55 = 1.6990597648061509725749329578093e+123 

C(c99標準)を使用してこれをどのように保存しますか?

int main(){
  long long int x = 174^55; //result is 153
  printf("%lld\n", x);
}
17
Martin Konecny

Cの通常の型は通常、最大64ビットしか格納できないため、たとえば配列に大きな数値を格納し、数学演算を自分で作成する必要があります。ただし、ここで車輪の再発明を行うべきではありません。この目的のために GNU Multiple Precision Arithmetic Library を試すことができます。

そして、コメントがすでに指摘しているように、^演算はバイナリXORです。べき乗には、powのような数学関数を使用する必要があります。

25
AndiDog

近似に問題がない場合は、浮動小数点(floatまたはdouble)の数値を使用できます。コメント提供者が言ったように、^ではなくpowが必要です。

ただし、暗号化の場合、近似は機能しません。非常に大きな整数を使用した算術のサポートが必要です。 GMPは、一般的な多倍長演算のサポートを提供します。多くの暗号化パッケージには、サードパーティのライブラリまたは組み込みのいずれかを介して、コードにそのようなアルゴリズムが含まれています。 PuTTYには大きな整数用のbignumライブラリがあり、OpenSSLにもおそらく似たようなものがあります。

基本的なCデータ型では不十分です。

5

整数の配列に格納できます。 64ビット整数は2つの32ビット整数です。 1024ビット整数は32ビット整数と見なすこともできます。

2
Goz