Переполнение переменной
Решал задачу с 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 шт):
На почти всех современных компьютерах long
занимает 32 (на Windows или Linux 32 bit) или 64 бита (на Linux 64 bit и macOS).
in
имеет тип long
. Числа порядка 1018 помещаются только в 64 бита. То есть, если запустите вашу программу не на Linux 64 bit, она сломается.