已知1800年1月1日是星期三,打印指定的年份和月份月历
Posted 黑马网仔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了已知1800年1月1日是星期三,打印指定的年份和月份月历相关的知识,希望对你有一定的参考价值。
#ifndef CALENDAR_H_ #define CALENDAR_H_ #include <string> #include <iostream> #include <stdio.h> void showCalendar(int year, int month); void showHead(int year, int month); void showBody(int year, int month); std::string month_number_toString(int month); int getFirstDayOfMonth(int year, int month); int getMonthDays(int year, int month); bool isLeapYear(int year); void showCalendar(int year, int month) { showHead(year, month); showBody(year, month); std::cout << "\n-----------------------------------\n"; } void showHead(int year, int month) { std::cout << " "; std::cout << month_number_toString(month) << " " << year << std::endl; std::cout << "-----------------------------------\n"; std::cout << " Sun Mon Tue Wed Thu Fri Sat\n"; } void showBody(int year, int month) { int firstDay = getFirstDayOfMonth(year, month); int i = 0; int monthDays = getMonthDays(year, month); for (i = 0; i < firstDay; i++) { std::cout << " "; } for (i = 1; i <= monthDays; i++) { printf(" %-3d ", i); if((firstDay + i) % 7 == 0) std::cout << std::endl; } } std::string month_number_toString(int month) { std::string ret; switch (month) { case 1: ret = "January"; break; case 2: ret = "February"; break; case 3: ret = "March"; break; case 4: ret = "April"; break; case 5: ret = "May"; break; case 6: ret = "June"; break; case 7: ret = "July"; break; case 8: ret = "August"; break; case 9: ret = "September"; break; case 10: ret = "October"; break; case 11: ret = "November"; break; case 12: ret = "December"; break; default: ret = "ErrorMonth"; } return ret; } int getFirstDayOfMonth(int year, int month) { int totalDays = 0; for (int i = 1800; i < year; i++) totalDays += isLeapYear(i) ? 366 : 365; for (int i = 1; i < month; i++) totalDays += getMonthDays(year, i); return (totalDays + 3) % 7; } int getMonthDays(int year, int month) { int monthArray[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; return (month == 2 && isLeapYear(year)) ? 29 : monthArray[month - 1]; } bool isLeapYear(int year) { return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0); } #endif #include "calendar.h" #include <iostream> int main() { using namespace::std; int year, month; cout << "Enter full year (e.g., 2001): "; cin >> year; while (getchar() != ‘\n‘); cout << "Enter month in number between 1 and 12: "; cin >> month; showCalendar(year, month); return 0; }
Enter full year (e.g., 2001): 2017 Enter month in number between 1 and 12: 6 June 2017 ----------------------------------- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 -----------------------------------
以上是关于已知1800年1月1日是星期三,打印指定的年份和月份月历的主要内容,如果未能解决你的问题,请参考以下文章