Ответ 1
Попробуйте суффикс "ULL": 600851475143ULL
Возможный дубликат:
длинный длинный на C/С++
Написание простой программы для задачи Эйлера проекта. Отказывается от компиляции, потому что "целочисленная константа слишком велика для" длинного "типа", хотя она должна быть в пределах размера без знака long long. Использование компилятора dev-С++.
код:
#include <iostream>
bool isprime (unsigned long long i)
{
if(i==1||i==0) return false;
if(i==2) return true;
for(unsigned long long k=2;k!=i-1;k++)
{
if(i%k==0) return false;
}
return true;
}
int main()
{
for(unsigned long long i=600851475143;i>=0;i--) //problematic line
{
if(isprime(i))
{
std::cout<<i;
std::cin.get();
return 0;
}
}
}
Попробуйте суффикс "ULL": 600851475143ULL
В вашем литеральном типе есть тип int
, который недостаточно велик для хранения значения. Попробуйте 600851475143ULL
в качестве первого исправления.
Обратите внимание, что даже этот цикл for
никогда не будет завершен, так как unsigned никогда не может быть меньше 0. Вместо этого используйте long long
и 600851475143LL
.
Должно быть ограничение поддержки dev-С++ для типа данных long long. Он отлично компилируется на MS VС++ 2010.