Aktualny wiek z PESELU

0

Napisałem taki kod, który działa dobrze dla roku < 2000. Nie mogę sobie jednak poradzić z napisaniem poprawnym pobierania roku (właściwie ilości lat) dla ludzi urodzonych po 2000 roku. Np dla peselu 00280209533 pokazuje mi 116, zamiast 16 :( Ale dla 89050505476 działa dobrze:

#include <iostream>
#include <sstream>
#include <cstdlib>
#include <string>
#include <string.h>
using namespace std;

int main()
{

    int wiek, lata;

    string pesel("89020911288");
    pesel = "00280209533";

    string rokString = pesel.substr(0, 2);
    string liczbaString = pesel.substr(2, 2);

    stringstream konwersja1( rokString );
    stringstream konwersja2( liczbaString );

    int rok, liczba;
    konwersja1 >> rok;
    konwersja2 >> liczba;

    if(liczba < 33)
    {
        wiek = 1900;
    }
    else if(liczba < 53)
    {
        wiek = 2100;
    }
    else if(liczba < 73)
    {
        wiek = 2200;
    }
    else if(liczba < 93)
    {
        wiek = 1800;
    }

    lata = 2016 - (wiek + rok);
    cout << lata << "\n";

    return 0;
}
2
#include <string>
#include <iostream>
using namespace std;

int main()
  {
   for(string pesel;getline(cin,pesel);)
     {
      int year=atoi(pesel.substr(0,2).c_str());
      int month=atoi(pesel.substr(2,2).c_str());
      int day=atoi(pesel.substr(4,2).c_str());
      int code=month/20;
      month-=20*code;
      year+=((code+1)%5-1)*100+1900;
      cout<<year<<endl;
     }   
   return 0;
  }
0

Dziękuję

1 użytkowników online, w tym zalogowanych: 0, gości: 1