非常に大きな数を扱うのに助けが必要です。 Windowsの計算によると、指数
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ビット整数と見なすこともできます。