У меня проблемы с реализацией алгоритма Луна в C? - PullRequest
0 голосов
/ 21 июня 2019

До сих пор я работал только над первой частью, где вы должны умножить каждую другую цифру, начиная со второй до последней цифры в числе, на 2 и добавить их цифры. Я не смог пройти мимо этого из-за 2 ошибок. Для одного цикл while, кажется, никогда не заканчивается, что приводит к тому, что сдвиг становится слишком большим числом и вызывает ошибку переполнения. Но в то же время я получаю ошибку деления на ноль для строки с: a = num% shift; ? Не уверен, как это вообще возможно, когда сдвиг становится слишком большим, как он может стать нулем?

bool luhnCheck(long num)
{
    int a = 2;
    int b;
    int total = 0;
    int incrementer = 0;
    long shift = 1;
    while(a != 0)
    {
        incrementer++;
        for(int i = 1; i<=incrementer; i++)
        {
            shift *= 100;
        }
        a = num % shift;
        b = a/(shift/10); //- a % (shift/10); // every other digit starting from the second to last one
        if(a!= 0)
        {
            total+= ((2*b) % 10) - ((2*b)/10); //sum of digits
        } 

    }    

    return total;

}
...