Cuando uso mi código en vscode local, solo da 63 como respuesta, pero cuando uso un compilador en línea diferente, funciona bien

Este es un código de algoritmo de Luhn y funciona bien en un compilador en línea, pero cuando lo uso en mi vscode local, solo da 63 como salida.

No sé si es un problema de memoria, ya que es una variable larga y tardía.

es decir, número de tarjeta de crédito como entrada.

#include <stdio.h>

// Finds its Luhn algorithm to see if its a valid credit card number.
void checksum(long num)
{
    int sum = 0;
    for (int i = 0; num != 0; num /= 10, i++)
    {
        if (i % 2 == 0)
        {
            sum = sum + num % 10;
        }
        else
        {
            int digit = 2 * (num % 10);
            sum = sum + (digit / 10) + (digit % 10);
        }
    }
    printf("%d", sum);
}
int main()
{
    long int num;
    // Takes credit Card number as input.
    do
    {
        printf("Number: ");
        scanf("%li", &num);
    } while (num < 0);
    checksum(num);

    return 0;
}

Mis entradas son como 374245455400126, 378282246310005. Y la salida es siempre 63.

Answer

El resultado depende del tamaño del tipo long intque puede ser igual al tamaño del tipo into al tamaño del tipo long long int.

Así que usa el tipo long long inten lugar del tipo long int.

Además, como el programa espera un valor sin signo, en lugar del tipo con signo long long int, es aún mejor usar el tipo unsigned long long int.