64-битные целые числа и printf
/scanf
Важная информация для пользователей языка C: считывание и запись 64-битных целых чисел слегка различается в Windows и Linux.
Под Linux (в частности, на сервере тестирования) компилятор GCC использует реализации функций printf
и scanf
из библиотеки GNU glibc
. В этой библиотеке символом формата для 64-битного целого числа со знаком (long long
) является %Ld
или %lld
, а для 64-битного целого числа без знака (unsigned long long
): %Lu
или %llu
.
Под Windows (во многих компьютерных классах) как MSVC (компилятор среды Visual Studio) так и GCC/MinGW (компилятор среды Code::Blocks) используют реализации функций printf
и scanf
из библиотеки Microsoft MSVCRT.DLL
. В этой библиотеке символом формата для 64-битного целого числа со знаком является %I64d
или %lld
, а для 64-битного целого числа без знака: %I64u
или %llu
.
Для того, чтобы ваше решение корректно работало вне зависимости от среды, рекомендуется всегда пользоваться символами %lld
и %llu
.
Приведённое замечание относится и к использованию функций printf
и scanf
в языке C++. Оно однако не касается использования в C++ объектов библиотеки streams
(объекты cin
, cout
и cerr
, а также классы ifstream
и ofstream
).
В языках Pascal, Java и Python разницы в использовании методов ввода-вывода между операционными системами нет.