zoukankan      html  css  js  c++  java
  • 已知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 << "
    -----------------------------------
    ";
    }
    
    void showHead(int year, int month)
    {
        std::cout << "           ";
        std::cout << month_number_toString(month) << " " << year << std::endl;
        std::cout << "-----------------------------------
    ";
        std::cout << " Sun  Mon  Tue  Wed  Thu  Fri  Sat
    ";
    }
    
    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() != '
    ');
        cout << "Enter month in number between 1 and 12: ";
        cin >> month;
        showCalendar(year, month);
        return 0;
    }
    View Code
    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
    -----------------------------------
  • 相关阅读:
    HBase with MapReduce (MultiTable Read)
    HBase with MapReduce (SummaryToFile)
    HBase with MapReduce (Summary)
    HBase with MapReduce (Read and Write)
    HBase with MapReduce (Only Read)
    Hbase中的BloomFilter(布隆过滤器)
    HBase的快照技术
    How To Use Hbase Bulk Loading
    Cloudera-Manager修改集群的IP
    Java中的HashSet和TreeSet
  • 原文地址:https://www.cnblogs.com/endenvor/p/6985694.html
Copyright © 2011-2022 走看看