非常に大きな数を扱うのに助けが必要です。Windows calc によると、指数は
174^55 = 1.6990597648061509725749329578093e+123
C(c99標準)を使用してこれをどのように保存しますか?
int main(){
long long int x = 174^55; //result is 153
printf("%lld\n", x);
}
非常に大きな数を扱うのに助けが必要です。Windows calc によると、指数は
174^55 = 1.6990597648061509725749329578093e+123
C(c99標準)を使用してこれをどのように保存しますか?
int main(){
long long int x = 174^55; //result is 153
printf("%lld\n", x);
}
通常、C の通常の型は最大 64 ビットしか格納できないため、たとえば大きな数値を配列に格納し、数学演算を自分で作成する必要があります。しかし、ここで車輪を再発明するべきではありません。この目的のために、 GNU Multiple Precision Arithmetic Libraryを試すことができます。
コメントがすでに指摘しているように、^
操作はバイナリ XOR です。累乗には、 のような数学関数を使用する必要がありますpow
。
近似に問題がなければ、浮動小数点数 (float
またはdouble
) を使用できます。そして、コメンテーターが言ったように、pow
ではなくが必要です。^
ただし、暗号化の場合、近似は機能しません。非常に大きな整数を使用した算術演算のサポートが必要です。GMP は、一般的な多倍精度演算サポートを提供します。多くの暗号化パッケージには、サードパーティのライブラリまたは組み込みのいずれかを介して、コードにそのようなアルゴリズムも含まれます。PuTTY には大きな整数用の bignum ライブラリがあり、OpenSSL にはおそらく似たようなものがあります。
基本的な C データ型では不十分です。
整数の配列に格納できます。64 ビット整数は、ちょうど 2 つの 32 ビット整数です。1024 ビット整数は、32 個の 32 ビット整数と見なすこともできます。