I have to store the number 600851475143
in my program. I tried to store it in long long int
variable and long double
as well but on compil
Have a look at the GNU MP Bignum library http://gmplib.org/
long long
is fine, but you have to use a suffix on the literal.
long long x = 600851475143ll; // can use LL instead if you prefer.
If you leave the ll
off the end of the literal, then the compiler assumes that you want it to be an int
, which in most cases is a 32-bit signed number. 32-bits aren't enough to store that large value, hence the warning. By adding the ll
, you signify to the compiler that the literal should be interpreted as a long long
, which is big enough to store the value.
The suffix is also useful for specifying which overload to call for a function. For example:
void foo(long long x) {}
void foo(int x) {}
int main()
{
foo(0); // calls foo(int x)
foo(0LL); // calls foo(long long x)
}
You had the right idea with long long int
(or unsigned long long int
), but to prevent the warning, you need to tell the compiler that the constant is a long long int
:
long long int value = 600851475143LL;
Those "L"s can be lower-case, but I'd advise against it -- depending on the font, a lower-case "L" often looks a lot like a one digit ("1") instead.