HJ73 计算日期到天数转换

描述

每一年中都有 1212 个月份。其中,1,3,5,7,8,10,121,3,5,7,8,10,12 月每个月有 3131 天;4,6,9,114,6,9,11 月每个月有 3030 天;而对于 22 月,闰年时有 2929 天,平年时有 2828 天。
现在,对应输入的日期,计算这是这一年的第几天。

一个年份是闰年当且仅当它满足下列两种情况其中的一种:
∙ ∙这个年份是 44 的整数倍,但不是 100100 的整数倍;
∙ ∙这个年份是 400400 的整数倍。

输入描述:

在一行上输入三个整数 a,b,c(1900≦a≦2200)a,b,c(1900≦a≦2200),分别代表年、月、日。保证输入的日期是合法的。

输出描述:

输出一个整数,代表输入的日期是这一年的第几天。

思路

1. 月份天数存储

使用数组存储各月天数,注意索引1对应1月:

int monthday[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

2. 闰年判断

根据闰年规则调整2月天数:

if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
    monthday[2] = 29; // 闰年2月29天
}

3. 天数累加

累加前N-1个月的天数,再加上当前月的天数:

int sumday = day; // 当前月天数
for(int i = 1; i < month; i++) {
    sumday += monthday[i]; // 累加前几个月的天数
}

 完整代码实现

#include 

int main() 
{
    int year, month, day;
    scanf("%d %d %d", &year, &month, &day);
    int sumday = day;
        int monthday[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
        {
            monthday[2] = 29;
        }
        for(int i = 1; i < month; i++)
        {
            sumday = sumday + monthday[i];
        }
    printf("%d", sumday);
    return 0;
}

你可能感兴趣的:(例题,算法,数据结构)