概要
年月日が与えられるので、その日付の曜日を計算する。
1800年1月1日は水曜日
コード
static void Main(string[] args)
{
string[] input = Console.ReadLine().Trim().Split(' ');
int y = int.Parse(input[0]);
int m = int.Parse(input[1]);
int d = int.Parse(input[2]);
int normalYear = 30 * 4 + 28 + 7 * 31;
int leapYear = normalYear + 1;
//1800年1月1日からy年m月d日の経過日数を計算
int NumberOfDays = 0;
//1800年1月1日から(y-1)年の大晦日までの日数を計算
if(y > 1800)
{
NumberOfDays += normalYear - 1;
for(int i =1801; i < y; i++)
{
if (IsLeapYear(i))
{
NumberOfDays += leapYear;
}
else
{
NumberOfDays += normalYear;
}
}
//y年になってからの経過日数を計算
for (int i = 1; i < m; i++)
{
if (i != 2)
{
if (i == 4 | i == 6 | i == 9 | i == 11)
{
NumberOfDays += 30;
}
else
{
NumberOfDays += 31;
}
}
else
{
if (IsLeapYear(y))
{
NumberOfDays += 29;
}
else
{
NumberOfDays += 28;
}
}
}
}
if(y == 1800)
{
NumberOfDays--;
}
NumberOfDays += d;
//経過に日数の7の剰余が
string dayOfWeek = null;
switch(NumberOfDays)
{
case 0:
dayOfWeek = "水";
break;
case 1:
dayOfWeek = "木";
break;
case 2:
dayOfWeek = "金";
break;
case 3:
dayOfWeek = "土";
break;
case 4:
dayOfWeek = "日";
break;
case 5:
dayOfWeek = "月";
break;
case 6:
dayOfWeek = "火";
break;
}
Console.WriteLine(dayOfWeek + "曜日");
}
static bool IsLeapYear(int y)
{
//400で割り切れるうるう年
if (y % 400 == 0)
{
return true;
}
//100で割り切れるなら平年
else if (y % 100 == 0)
{
return false;
}
//4で割り切れるならうるう年
else if (y % 4 == 0)
{
return true;
}
else
{
return false;
}
}