JACK_C#_年月日

 #region 练习题
            //已知:今天是2018年2月26日星期一   问:1年零8个月又3天之后是星期几
            //7进制    400   400%7   

            //计算出1年零8个月又3天是多少天

算法一:

            //   int oYear = 2018;
            //            int oMonth = 2;
            //            int oDay = 26;
            //            int year = 1;
            //            int month = 8;
            //            int day = 3;
            //            int resultDay=0;
            //            //当前是闰年还是平年  是否过了2月   


            //            resultDay +=365 + 
            //                ((oYear % 4 == 0 && oYear % 100 != 0 && oMonth <= 2) ? 1 : 0);
            //            //进行月份的计算  每次月份减一   计算当月天数
            //            #region while循环做月处理
            //            //while (month > 0)
            //            //   {


            //            //       switch (oMonth)
            //            //       {
            //            //           case 2:
            //            //               //如果是2月  且是当前年份是润年  加相应的天数
            //            //               resultDay += 28 +
            //            //                   ((oYear + year) % 4 == 0 && (oYear +
            //            //                   year )% 100 != 0 ? 1 : 0);
            //            //               break;
            //            //           case 4:
            //            //           case 6:
            //            //           case 9:
            //            //           case 11:
            //            //               resultDay += 30;
            //            //               break;
            //            //           default:
            //            //               resultDay += 31;
            //            //               break;
            //            //       }
            //            //       month -= 1;
            //            //       oMonth += 1;
            //            //   }
            //            #endregion
            //            #region 使用数组进行月天数处理
            //            //声明一个数组取保存所有的月份日期
            //            int[] monthArray = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            //            //因为数组下标是从0开始,月份需要减一对应数组下标
            //            for (int i = oMonth-1; i < month+oMonth-1;)
            //            {
            //                //如果是2月(对应数组下标从0开始 月份减一)
            //                if(i==1)
            //                    resultDay += monthArray[i] +
            //                        ((oYear + year) % 4 == 0 && (oYear +
            //                        year) % 100 != 0 ? 1 : 0);
            //                else
            //                resultDay += monthArray[i];
            //                i++;
            //            }
            //#endregion
            //            resultDay += day;
            //           Console.WriteLine( resultDay % 7 + 1);
            //            Console.ReadLine();

            #endregion

算法二:

            Console.WriteLine("输入开始年份");
            int nowYear =int.Parse( Console.ReadLine());


            Console.WriteLine("输入开始月份");
            int nowMonth = int.Parse(Console.ReadLine());


            Console.WriteLine("输入开始日");
            int nowDay = int.Parse(Console.ReadLine());


            Console.WriteLine("输入星期数");
            int nowWeek = int.Parse(Console.ReadLine());




            Console.WriteLine("输入经过年份");
            int yearCount = int.Parse(Console.ReadLine());


            Console.WriteLine("输入经过月份");
            int monthCount = int.Parse(Console.ReadLine());


            Console.WriteLine("输入经过天数");
            int dayCount = int.Parse(Console.ReadLine());


            int totalMonths=0;
            int totaldays = 0;
            int week = nowWeek;


            totalMonths = 12 * yearCount + monthCount;


           


            for (int i = nowMonth; i < nowMonth+totaldays; i++)
            {
                switch (i%12)
                {
                    case 2:
                        {
                            if (nowYear % 4 == 0 && nowYear % 100 != 0&&monthCount<3)
                            {
                                ++totaldays;
                            }


                            nowYear++;
                            totaldays += 28;
                            if(nowYear % 4 == 0 && nowYear % 100 != 0&&monthCount>2)
                                ++totaldays;
                            break;
                        }
                    case 1:
                    case 3:
                    case 5:
                    case 7:
                    case 8:
                    case 10:
                    case 0:
                    
                        {
                            totaldays += 31;


                            break;
                        }
                    case 4:
                    case 6:
                    case 9:
                    case 11:                    
                        {
                            totaldays += 30;
                            break;
                        }
                }
            }
            totaldays += dayCount;


            week = totaldays % 7+4;
            Console.WriteLine(week);



            #region 练习题2
            //已知一个人出生的日期为xx年xx月xx日  求10000天之后的日期
            //10000->0   
            int brithYear=1979;int brithMonth=7;int brithDay=11;int day = 10000;
            int[] monthArray = new int[] { 0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            day += brithDay;
            //年份进行处理
            while (true)
            {
                //对年份进行处理   年进制问题   365  366 ->1
                while (day>366)
                {
                    brithYear += 1;
                    day -= 365 + (brithYear % 4 == 0 && brithYear % 100 != 0 ? 1 : 0);
                }
                //对月份进行处理
                while (day>monthArray[brithMonth])
                {
                    if (birthMonth==2)
                    {
                        //如果是2月
                        if (brithMonth == 2 && brithYear % 4 == 0 && brithYear % 100 != 0)
                            break;
                        day -= monthArray[brithMonth] +
                            (brithYear % 4 == 0 && brithYear % 100 != 0 ? 1 : 0);
                    }
                    //如果是其他月份
                    else
                        day -= monthArray[brithMonth];
                    //进行基数day的减法与月份的加法
                    brithMonth += 1;
                    //如果到了下一年
                    if (brithMonth == 13)
                    {
                        brithMonth = 1;
                        brithYear += 1;
                    }
                }
                break;
            }
            Console.WriteLine(brithYear + "年" + brithMonth + "月" + day + "日");
            Console.ReadLine();


            #endregion
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值