#include <stdio.h>
#define COG1_TEETH 4
#define COG2_TEETH 25
#define COG3_TEETH 4
#define BASE 1752
int isleap(int year);
int main(void)
{
const char *result[] = { "not a leap year", "a leap year" };
int year = 2100;
printf("%d is %s\n", year
, result
[isleap
(year
)]); return 0;
}
int isleap(int year)
{
unsigned a, b, c;
unsigned i;
if (year < BASE) return 0; /* Not Gregorian year */
a = 0;
b = COG2_TEETH - COG1_TEETH;
c = COG3_TEETH - 1;
i = year - BASE;
while (i--) {
if (++a == COG1_TEETH) {
a = 0;
if (++b == COG2_TEETH) {
b = 0;
if (++c == COG3_TEETH)
c = 0;
}
}
}
return !b ? !a && !c : a == 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIENPRzFfVEVFVEggICAgNAojZGVmaW5lIENPRzJfVEVFVEggICAgMjUKI2RlZmluZSBDT0czX1RFRVRIICAgIDQKI2RlZmluZSBCQVNFICAgICAgICAgIDE3NTIKCmludCBpc2xlYXAoaW50IHllYXIpOwoKaW50IG1haW4odm9pZCkKewoJY29uc3QgY2hhciAqcmVzdWx0W10gPSB7ICJub3QgYSBsZWFwIHllYXIiLCAiYSBsZWFwIHllYXIiIH07CgogICAgaW50IHllYXIgPSAyMTAwOwogICAgcHJpbnRmKCIlZCBpcyAlc1xuIiwgeWVhciwgcmVzdWx0W2lzbGVhcCh5ZWFyKV0pOwogICAgcmV0dXJuIDA7Cn0KCmludCBpc2xlYXAoaW50IHllYXIpCnsKICAgIHVuc2lnbmVkIGEsIGIsIGM7CiAgICB1bnNpZ25lZCBpOwoKICAgIGlmICh5ZWFyIDwgQkFTRSkgcmV0dXJuIDA7ICAgICAgLyogTm90IEdyZWdvcmlhbiB5ZWFyICovCgogICAgYSA9IDA7CiAgICBiID0gQ09HMl9URUVUSCAtIENPRzFfVEVFVEg7CiAgICBjID0gQ09HM19URUVUSCAtIDE7CiAgICBpID0geWVhciAtIEJBU0U7CgogICAgd2hpbGUgKGktLSkgewogICAgICAgIGlmICgrK2EgPT0gQ09HMV9URUVUSCkgewogICAgICAgICAgICBhID0gMDsKICAgICAgICAgICAgaWYgKCsrYiA9PSBDT0cyX1RFRVRIKSB7CiAgICAgICAgICAgICAgICBiID0gMDsKICAgICAgICAgICAgICAgIGlmICgrK2MgPT0gQ09HM19URUVUSCkKICAgICAgICAgICAgICAgICAgICBjID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gIWIgPyAhYSAmJiAhYyA6IGEgPT0gMDsKfQo=