I wrote that answer based on in this my other answer (there I explain it in more detail). I just translated the pertinent part of the algorithm to C.
#include <stdio.h>
#include <locale.h>
int restoSemSinal(int a, int b) {
return (a >= 0L
? a % b // Positivo.
: (b + (a % b)) % b); // Negativo.
}
int divisaoSemSinal(int a, int b) {
return a >= 0L
? a / b // Positivo.
: (a / b) - (a % b == 0 ? 0 : 1); // Negativo.
}
int contarDiasDesde1970(int dia, int mes, int ano) {
// Passo 1.
int anosDesde1970 = ano - 1970;
// Passo 2.
int periodosDe400Anos = divisaoSemSinal(anosDesde1970, 400);
int anoNoPeriodoDe400Anos = restoSemSinal(anosDesde1970, 400);
// Passo 3.
int periodosDe4AnosNos400 = anoNoPeriodoDe400Anos / 4;
int anoNoPeriodoDe4Anos = anoNoPeriodoDe400Anos % 4;
// Passo 4.
int diasNosAnosAnterioresDoPeriodoDe4Anos = 365 * anoNoPeriodoDe4Anos + (anoNoPeriodoDe4Anos == 3 ? 1 : 0);
// Passo 5.
int diasNoAno = dia - 1;
int tabelaDeMeses[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int i;
for (i = 0; i < mes - 1; i++) {
diasNoAno += tabelaDeMeses[i];
}
// Passo 6.
int dias = diasNoAno
+ diasNosAnosAnterioresDoPeriodoDe4Anos
+ periodosDe4AnosNos400 * 1461
+ periodosDe400Anos * 146097;
// Passo 7.
if (anoNoPeriodoDe4Anos == 2 && mes > 2) dias++;
if (anoNoPeriodoDe400Anos > 130 || (anoNoPeriodoDe400Anos == 130 && mes > 2)) dias--;
if (anoNoPeriodoDe400Anos > 230 || (anoNoPeriodoDe400Anos == 230 && mes > 2)) dias--;
if (anoNoPeriodoDe400Anos > 330 || (anoNoPeriodoDe400Anos == 330 && mes > 2)) dias--;
return dias;
}
int main() {
setlocale(LC_ALL, "portuguese");
int diaNascimento, diaHoje, mesNascimento, mesHoje, anoNascimento, anoHoje;
printf("Digite o dia que você nasceu:\n");
scanf("%d", &diaNascimento);
printf("Digite o mês que você nasceu:\n");
scanf("%d", &mesNascimento);
printf("Digite o ano que você nasceu:\n");
scanf("%d", &anoNascimento);
printf("Digite o dia (data de hoje):\n");
scanf("%d", &diaHoje);
printf("Digite o mês (data de hoje):\n");
scanf("%d", &mesHoje);
printf("Digite o ano (data de hoje):\n");
scanf("%d", &anoHoje);
int nascimento = contarDiasDesde1970(diaNascimento, mesNascimento, anoNascimento);
int hoje = contarDiasDesde1970(diaHoje, mesHoje, anoHoje);
int diasDeVida = hoje - nascimento;
printf("Dias: %d", diasDeVida);
return 0;
}
Although this algorithm uses as a reference point the year 1970, it works for any date from 15 October 1582. He could use any other full year of the Gregorian era (from 1583) as a point of reference with just a few minor adjustments, but I decided to keep 1970 because that’s what was in the original algorithm.
For dates prior to the reform of the calendar held in 1582 (which instituted the Gregorian calendar), the algorithm will produce wrong results.
Improve your question. Is there an error? What is your question? You did not answer the question...
– LocalHost
I’m beginner, I’m not getting the right logic to do, I want to know how many days I’ve lived between the date I was born and today including the leap years ps: in C language ( If possible without using vector or matrix)
– Amanda Silva
Related: http://answall.com/a/182280/132 and http://answall.com/a/70604/132
– Victor Stafusa