"moderne" Version von "IstSchaltJahr" und "TageImMonat"

Zvoni

Erfahrenes Mitglied
Mahlzeit C/C++-ler
hab am Wochenende dieses faszinierende Video angeschaut:

Darauf hin habe ich mal das Netz durchforscht, und unten angeführte "classic"-Versionen gefunden (welche in dieser Form auch im Video genannt/gezeigt werden)

Da ich keinen C-Compiler habe, meine Frage an euch:
Kann mal jemand nen speed-test machen? keine Ahnung, ein paar Millionen mal oder so

Schreibfehler usw. könnt ihr behalten :giggle:
bin kein c-ler, und ich hab versucht die "New"-Versionen so gut es geht in C zu schreiben

C:
int IsLeapYearNew2(int y) {
    int d = (y % 100 != 0) ? 4 : 16;
    return (y % d == 0);
}    
int IsLeapYearNew(int y) {
    if (y % 100 != 0) {
        return (y % 4 == 0);
    } else {
        return (y % 16 == 0);
    }
}   
int IsLeapYearClassic2(unsigned int y) {
    return (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0));
}       
int IsLeapYearClassic(int y) {
   if (y % 400 == 0) {
      return 1;
   }  
   else if (y % 100 == 0) {
      return 0;
   }  
   else if (y % 4 == 0) {
      return 1;
   }
   else {
      return 0;
   }
}
int LastDayOfMonthNew(int y, int m) {
    if (m==2) return IsLeapYearNew(y) ? 29 : 28;  /*oder IsLeapYearNew2*/
    return 30 | (m ^ (m >> 3));
}   
int LastDayOfMonthClassic(int y,int m){
    if (m==2) return IsLeapYearClassic2(y) ? 29 : 28;
    int last[]=
    {31,28,31,30,31,30,
     31,31,30,31,30,31};
    return last[m-1];
}
 

Neue Beiträge

Zurück