целочисленная константа слишком велика для типа" long " [duplicate]

Возможные Дубликаты:
длинный длинный в C / C++

написание простой программы для задачи проекта Эйлера. Отказывается компилировать, потому что "целая константа слишком велика для "длинного" типа", даже если это должно быть хорошо в пределах размера без знака долго долго. Использование компилятора dev-c++.

код:

#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;
        }
    }
}

3 ответов


попробуйте суффикс" ULL":600851475143ULL


ваш литерал как типизированный имеет тип int который недостаточно велик, чтобы удерживать значение. Попробуй!--1--> в качестве первого исправить.

Примечание даже с этим, ваш for цикл никогда не завершится, так как unsigned никогда не может быть меньше 0. Вместо этого используйте long long и 600851475143LL.


должно быть ограничение поддержки dev-C++ для long long тип данных. Он отлично компилируется на MS VC++ 2010.