Переполнение переменной

Решал задачу с codeForces в кодовом пространстве гитхаба с компилятором g++. Задачу вроде решил, вот код:

#include <iostream>

int main(){
    int iterations;
    std::cin >> iterations;
    long in;
    long long coins = 1;
    for (int x = 0; x < iterations; ++x){
        std::cin >> in;
        while(in>3){
            in /=4;
            coins *= 2;
        }
        std::cout << coins << std::endl;
        coins = 1;
    }
    return 0;
}

В кодовом пространстве все отрабатывает идеально. Но когда пытаюсь вставить задачу на сайт переменная coins перестает множиться после достижения 32768. Пробовал добавлять unsigned, менял типы на int, uint16,32,64_t, менял компиляторы - ничего не помогало. Подскажите пожалуйста, в чем еще может быть проблема (кроме моей некомпетентности).


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

На почти всех современных компьютерах long занимает 32 (на Windows или Linux 32 bit) или 64 бита (на Linux 64 bit и macOS).

in имеет тип long. Числа порядка 1018 помещаются только в 64 бита. То есть, если запустите вашу программу не на Linux 64 bit, она сломается.

→ Ссылка