C 言語による,非常にエレガントな解がある。出典は忘れた。
#include <stdio.h> int dayofweek(int y, int m, int d) /* 0 = Sunday , 1 <= m <= 12, y > 1752 or so */ { return y -= m < 3, (y + y/4 - y/100 + y/400 + "032503514624"[m-1]-'0' + d) % 7; } int main(void) { int y, m, d; y = 1996; m = 2; d = 27; printf("%i true value = 2\n", dayofweek(y, m, d)); return 0; } /* オリジナル */ #if 0 int dayofweek(int y, int m, int d) /* 0 = Sunday */ /* 1 <= m <= 12, y > 1752 or so */ { static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}; y -= m < 3; return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7; } #endif