На вид - простая задачка. Но в ней есть подвох!
Что бы её решить, нужен тип - 64-битный int. Проблема возникает, когда используют различные C++ компиляторы на разных платформах и архитектурах.
Сервер соревнований, похоже, 32-битный. Потому недостаточно "long int" (хотя это работает на 64-битной машине).
Не уверен, как лучше объявить такой тип. На моём Linux он называется "__int64_t", но сервер его не принимает. Сервер понимает "__int64", но это уже у меня не компилируется.
Решение, которое сработало: "long long int".
Что бы её решить, нужен тип - 64-битный int. Проблема возникает, когда используют различные C++ компиляторы на разных платформах и архитектурах.
Сервер соревнований, похоже, 32-битный. Потому недостаточно "long int" (хотя это работает на 64-битной машине).
Не уверен, как лучше объявить такой тип. На моём Linux он называется "__int64_t", но сервер его не принимает. Сервер понимает "__int64", но это уже у меня не компилируется.
Решение, которое сработало: "long long int".
Потому что это маразм, что на одной платформе long - это 32 бита, а на другой - 64 бита. Еще более маразматично то, что ,если я не ошибаюсь, 64-битные платформы в C++ и Linux имеют различие в количестве битов в каком-то из стандартных типов.
В Стандарте четко сказано, что рассчитывать на 64 бита можно только с long long.
А в линуксе long 64-ех битный.
По крайней мере я так понимаю вот это:
http://www.ibm.com/developerworks/library/l-port64.html
Но авторы компилятора имеют право заложить и большую разрядность. Не вижу в этом проблемы, за исключением случая программирования встроенных систем.