Cで数値を表す変数が必要です600851475143
が、この値は long の最大値よりも大きくなっています。つまり、2147483647
どのデータ型を使用すればよいですか?
3 に答える
整数型を使用してくださいlong long
。
少なくとも -9223372036854775807 <= x <= +9223372036854775807 の範囲に適しています。
#include <stdio.h>
int main(int argc, char *argv[]) {
long long big = 600851475143;
printf("%lld\n", big); // prints 600851475143
return 0;
}
int64_t
または、 uint64_t
64 ビット型を使用することもできます。
上記の範囲は、C11 5.2.4.2.1 で指定された最小範囲です。
unsigned long を使用します。これにより、0 以上の数値のみが許可されますが、範囲が拡張されます。long 型が 64 ビットであることを確認します。これにより、値の範囲も拡張されます。
LGPL の下でリリースされている gmplib を使用することもできます: http://gmplib.org/
@H2CO3で提案されているように、任意精度の整数数学ライブラリを使用することに加えて、オーバーフローを心配せずにそのような大きな数を扱う予定がある場合は、これがおそらく最善の策です。コンパイラ/プラットフォームのドキュメントで表現可能な最大数を確認する必要があります。
符号付き算術演算が必要ない場合は、 unsigned long
orunsigned long long
を使用できます。それ以外の場合はsigned long long
. 標準ではサイズが正確に規定されているわけではなく、最小値のみが指定されていることに注意してください (C99 ドラフト標準 - 付属書 E から):
#define LONG_MAX +2147483647
#define LONG_MIN -2147483647
#define LLONG_MAX +9223372036854775807
#define LLONG_MIN -9223372036854775807
// [...]
#define ULONG_MAX 4294967295
#define ULLONG_MAX 18446744073709551615