Кажется, в текущих версиях C++ компиляторов, абсолютно правильно работает %lld
, в том числе, совпадая с %I64d
Мне кажется, стоит убрать предупреждение, мешающее отправлять такие решения и не добавлять спойлеры в задачах, о том, что нужен ввод/вывод 64-битных чисел.
Код
#include <stdio.h>
int main() {
long long x = 1ll << 60;
printf("%lld %I64d\n", x, x);
printf("%d %d %d\n", sizeof(int), sizeof(long), sizeof(long long));
printf("%d %d\n", sizeof(double), sizeof(long double));
return 0;
}
Посылки в случайную задачу:
И это даже не оптимизатор постарался. В более содержательном случае тоже все работает. 3143216
Тем не менее, даже если на отдельно взятом Codeforces всё работает — в жюришных решениях и чекерах всё равно ещё несколько лет придётся писать через #define для совместимости с теми местами, где они могут быть скомпилированы.
Насколько мне известно, %lld/%lli был пофиксен с Windows 7+. В них gcc кидает warning'и но работает корректно.
Ввиду того, что эта тема недавно снова всплыла, я потестил последний MinGW (GCC 4.7.2) и получил такие результаты:
%lld
работает всегда%lld
работает всегда%lld
работает не всегда:gcc -std=c99
работаетg++
не работаетg++ -std=c++11
работаетТак что не всё так хорошо, как казалось бы.
На семерке не тестил?
Теперь потестил.