Вероятнее всего, результат не вмещается в long int (32 бита), и нужно взять long long int (64 бита).
45 лет, напрмер, это (грубо): 45*365*24*60*60*1000=1 419 120 000 000 - такое число точно в long int не влезет.
Формула перевода даты в количество дней выглядит простоватой и скорее всего, не верна.
Правильная формула для даты (взял из исходников
IBPP):
uint64_t convertDate(int d, int m, int y)
{
if (m < 3)
{
m += 12; y -= 1;
}
return((d + (153*m - 457) / 5 + 365*y + y/4 - y/100 + y/400 - 306)-693596);
}