閏年

西暦が400で割り切れる年はうるう年である
400で割り切れない場合、西暦が100で割り切れる年はうるう年ではない
100で割り切れない場合、西暦が4で割り切れる年はうるう年である
4で割り切れない場合、うるう年ではない

much better to understand
ex if n % 400 != 0 && n % 100 = 0
return うるう年

n = 2000
-> 閏年
n = 1900
-> not 閏年
n = 2100
-> not 閏年

1900, 1, 1 Monday
1989, 7, 1
(364 + 365 * 88 + 22 + (31 + 28 + 31 + 30 + 31 + 30 + 1)) % 7 = 5
-> saturday

here is Java code

public class WhatDayWillItBe
{
    public static void main(String[] args)
    {
        Day desiredDay = new Day(1983, 6, 18);

        Day referenceDay = new Day(1900, 1, 1);
        int referenceWeekDay = 1;
        int daysBetween = desiredDay.daysFrom(referenceDay):
        int uncorrectedWeekDay = referenceWeekDay + daysBetween;
        int weekday = uncorrectedWeekDay % 7;

        System.out.print("Weekday: ");
        System.out.println(weekday);
    }
}