ACM is a 64-bit integer (_ int64) of C ++)
When I was doing ACM, I often encountered some big integers. The commonly used built-in integer types are often too small: the range of long and Int Is [-2 ^ 31,2 ^ 31), that is,-2147483648 ~ 2147483647. The unsigned range is [0, 2 ^ 32), that is, 0 ~ 4294967295. That is to say, the regular 32-bit integer can only process numbers smaller than 4 billion.
By http://www.acmwiki.com/What should I do if I encounter a number bigger than 4 billion? In this case, the 64-bit extension of C ++ is used. Different compilers have different extensions for 64-bit integers. Based on ACM, the following describes only the extension of vc6.0 and G ++ compiler. The 64-bit Integers of VC are respectively _ int64 and unsigned _ int64. Their ranges are [-2 ^ 63, 2 ^ 63) and [0, 2 ^ 64 ), that is,-9223372036854775808 ~ 9223372036854775807 and 0 ~ 18446744073709551615 (about 180 billion million ). The operation of 64-bit integers is basically the same as that of 32-bit integers, and supports four arithmetic operations and bit operations. When the 64-bit and 32-bit mixed operations are performed, the 32-bit integer is implicitly converted to a 64-bit integer. However, VC input and output are not compatible with _ int64. If you write the following code: 1 _ int64 A; 2 CIN>; 3 cout <A; then, the error c2679: Binary '>' will be received in the 2nd line ': no operator defined which takes a right-hand operand of Type '_ int64' (or there is no acceptable conversion) "error;" error c2593: 'operator' <'is ambiguous "error. Is it impossible to make input and output? Of course not. You can use the C method: scanf ("% i64d", & A); printf ("% i64d", a); to input and output the data correctly. When unsigned _ int64 is used, change "i64d" to "i64u. OJ usually uses the G ++ compiler. The 64-bit extension method is different from that of VC. They are called long and unsigned long respectively. The processing scale is the same as that used except for input and output. For input and output, the extension is better than VC. You can use either 1 long a; 2 CIN> A; 3 cout <A; or scanf ("% LLD", & ); printf ("% LLD", a); when using the unsigned number, change "% LLD" to "% LlU. Finally, let me add: as a special case, if you are using the dev-C ++ g ++ compiler, it uses "% i64d" instead of "% LLD ".