今天没做什么好题,分享一个我曾经做过的计算日期的小程序。
// 额外3.cpp: 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> int totalDays(int year, int month, int day) { int a;//当年已过的天数 int leapYear = year / 4 - year / 100 + year / 400;//闰年的总数 switch (month) { case 1: a = 0; break; case 2: a = 31; break; case 3: a = 31 + 28;//总感觉应该根据是不是闰年而判断加28还是29,但是程序输出总是正确的,不知道这是不是一个bug。 break; case 4: a = 31 + 28 + 31; break; case 5: a = 31 + 28 + 31 + 30; break; case 6: a = 31 + 28 + 31 + 30 + 31; break; case 7: a = 31 + 28 + 31 + 30 + 31 + 30; break; case 8: a = 31 + 28 + 31 + 30 + 31 + 30 + 31; break; case 9: a = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31; break; case 10: a = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30; break; case 11: a = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31; break; case 12: a = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30; break; } return 365 * (year - 2 - leapYear) + leapYear*366 + a + day;//从公元1年1月1日到现在的天数 /*减2是因为,已经过去的年没有公元0年,且也不包括用户输入的年份。减去闰年数量是因为闰年单算(乘以366)。所以,“year-2-leapYear”就是平年年数。变量a存储了用户输入年份 之前,当年已经过的月份的天数*/ } int main() { int year, month, day,total; std::cout << "请输入年份:"; std::cin >> year; std::cout << "请输入月份:"; std::cin >> month; std::cout << "请输入日期:"; std::cin >> day; switch (month)//检查输入月份是否存在,或与日期是否匹配 { case 1: if (day > 31) { std::cout << "日期错误!"; system("pause"); return 1; } break; case 2: if (year % 4 == 0)//闰年情况 { if (day > 29) { std::cout << "日期错误!"; system("pause"); return 1; } } else //平年情况 { if(day>28) { std::cout << "日期错误!"; system("pause"); return 1; } } break; case 3: if(day>31) { std::cout << "日期错误!"; system("pause"); return 1; } break; case 4: if (day > 30) { std::cout << "日期错误!"; system("pause"); return 1; } break; case 5: if(day>31) { std::cout << "日期错误!"; system("pause"); return 1; } break; case 6: if(day>30) { std::cout << "日期错误!"; system("pause"); return 1; } break; case 7: if(day>31) { std::cout << "日期错误!"; system("pause"); return 1; } break; case 8: if(day>31) { std::cout << "日期错误!"; system("pause"); return 1; } break; case 9: if(day>30) { std::cout << "日期错误!"; system("pause"); return 1; } break; case 10: if(day>31) { std::cout << "日期错误!"; system("pause"); return 1; } break; case 11: if(day>30) { std::cout << "日期错误!"; system("pause"); return 1; } break; case 12: if(day>31) { std::cout << "日期错误!"; system("pause"); return 1; } break; default: std::cout << "日期错误!"; system("pause"); return 1; } total = totalDays(year, month, day);//从公元1年1月1日到现在的总天数 std::cout << "这个日期的星期是:"; int b = total % 7;//根据总天数除以7后的余数判断星期(公元1年1月1日是星期一) switch (b) { case 0: std::cout << "一"; break; case 1: std::cout << "二"; break; case 2: std::cout << "三"; break; case 3: std::cout << "四"; break; case 4: std::cout << "五"; break; case 5: std::cout << "六"; break; case 6: std::cout << "日"; break; } std::cout<<" "; system("pause"); return 0; } // return 0表示程序正常返回,back=true表示程序异常返回。 // // Copyright JiangYueChen 2018 All Rights Reserved. //