题目要求:
实现思路:
- 先判断当前年是闰年还是平年
- 根据平年还是闰年选择对应月的天数,减去输入的天数得到该月还剩余多少天
- 用累加天数减去剩余天数,开始进入下1个月,将月份加1
- 用累加天数减去下1个月天数,得到仍剩余天数,再将月份加1
- 如果月份大于12,则减去12,将年份加1,表示进入下1年,再判断其是否为闰年
- 依次类推,直至剩余天数小于当前月的天数,则表示已经得到最终的日期
实现代码:
#include <stdio.h>
int isLeap(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main(int argc, char *argv[]) {
int months[13][2] = {{0, 0},
{31, 31},
{28, 29},
{31, 31},
{30, 30},
{31, 31},
{30, 30},
{31, 31},
{31, 31},
{30, 30},
{31, 31},
{30, 30},
{31, 31}};
int year, month, day, num, b, tmp, n;
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
scanf("%d%d%d%d", &year, &month, &day, &num);
b = isLeap(year);
tmp = months[month][b] - day;
if(num>tmp){
// 大于1个月
while ((num - tmp) > 0) {
num = num - tmp;
month++;
if (month > 12) {
month = month - 12;
year++;
b = isLeap(year);
}
tmp = months[month][b];
}
}else{
// 在1个月内
num = day + num;
}
printf("%04d-%02d-%02d\n", year, month, num);
}
return 0;
}