LoginSignup
0
0

More than 3 years have passed since last update.

[paiza レベルアップ問題集] 日付セット 曜日 (paizaランクB相当)

Posted at

問題元

概要

年月日が与えられるので、その日付の曜日を計算する。
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;
            }
        }
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0