Pai sa presupunem ca ai vectorul v[ i] = cate zile are a i-a luna (ianuarie, februarie ....). Folosind acest vector, problema e simpla. Stim in ce zi, luna si an suntem. Cel mai usor, fara sa te stresezi (nu e prea optim, dar fiindca n-ul e destul de mic cred, nu se simte), faci asa : faci un for de la 1 la n, reprezentand data dupa i zile. Astfel, la pasul i, prima data incrementezi pe zi, si apoi verifici odata daca zi > v[luna] (daca a i-a zi a lunii in care suntem este mai mare decat limita maxima a acelei zile), atunci pe zi il faci 1 si incrementezi luna (pentru ca tu de fapt esti in ziua v[luna] + 1, care nu exista si este de fapt ziua 1 a urmatoarei luni. Mai departe, verifici daca luna este 13 (acelasi principiu, luna 13 nu exista, si atunci ea de fapt este luna 1 a urmatorului an), faci pe luna = 1 si incrementezi an. Si inca ceva, daca cumva este an bisect, adica este multiplu de 4, atunci v[2] (luna februarie) are 29 zile.
int v[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // vectorul v, incepand de la 1
if (an % 4 == 0) // an bisect
v[2] = 29;
for i = 1, n {
if (zi == v[luna] + 1) // sau zi > v[luna]
zi = 1, luna++; // luna urmatoare
if (luna == 13) {
luna = 1, an++; // anul urmator
if (an % 4 == 0) // an bisect
v[2] = 29;
else v[2] = 28; // ne-bisect
}
}