曜日を求める関数     Last modified: May 15, 2002

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


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI