永发信息网

以2015年10月1日为开始 计算X天后为几年几月几日。X小于1500

答案:1  悬赏:70  手机版
解决时间 2021-11-14 11:42
  • 提问者网友:暮烟疏雨之际
  • 2021-11-14 02:31
以2015年10月1日为开始 计算X天后为几年几月几日。X小于1500
最佳答案
  • 五星知识达人网友:鸠书
  • 2021-11-14 02:58
#include 



#define is_leap_year(year) (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
#define NONLEAP_YEAR_DAYS 365

static int nonleap_year_months[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

typedef struct DateTime {
    int year;
    int month;
    int day;
} DateTime;


int get_days_from_the_first_year(DateTime* today) {
    int i;
    int days = today->year * NONLEAP_YEAR_DAYS;
    int leap_year_count = today->year / 4 + 1;
    days += leap_year_count;  // 闰年需要多加一天,一共有 leap_year_count 这么多闰年

    // 接下来计算月和日
    if (is_leap_year(today->year))
        nonleap_year_months[1] = 29;
    else
        nonleap_year_months[1] = 28;

    for (i = 0; i < today->month - 1; i++) {
        days += nonleap_year_months[i];
    }
    days += today->day;
    return days;
}

DateTime convert_to_date(int days) {
    int period = 4 * NONLEAP_YEAR_DAYS + 1; // 4 年 1 闰,周期是 4 * 365 + 1
    int period_count = days / period; // 周期个数
    int remaining_years = 0;

    DateTime dt;

    // 多少个 4 年
    dt.year = period_count * 4;
    dt.month = 1;
    dt.day = 1;
    days -= period_count * period;

    // 剩余的年数
    remaining_years = (days - 1) / NONLEAP_YEAR_DAYS;
    dt.year += remaining_years;

    // 剩余天数
    days = (days - 1 ) % NONLEAP_YEAR_DAYS; // 需要减掉闰年多出的一天。

    // 统计月份和天数
    {
        int i;

        if (remaining_years == 0) { // 刚好是头一年的闰年
            nonleap_year_months[1] = 29;
        }
        else {
            nonleap_year_months[1] = 28;
        }

        for (i = 0; i < 12; i++) {
            days -= nonleap_year_months[i];
            if (days > 0) {
                dt.month++;
            }
            else {
                dt.day = days + nonleap_year_months[i];
                break;
            }
        }
    }
    return dt;
}

int main()
{
    int days;
    int total;
    DateTime dt;

    printf("Today is 2015.10.1
");

    dt.year = 2015;
    dt.month = 10;
    dt.day = 1;

    scanf("%d", &days);

    total = get_days_from_the_first_year(&dt);
    total += days;

    dt = convert_to_date(total);

    printf("After %d days, is %d.%d.%d
", days, dt.year, dt.month, dt.day);
    return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯