//已知:今天是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);
//已知一个人出生的日期为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
}