#include<iostream>
using namespace std;
int daytab[2][31] = {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
int main() {
int year;
int month, day;
int count;
int flag = -1;
int caseNum;
scanf("%d\n", &caseNum);
while (caseNum--) {
scanf("%d %d %d %d", &year, &month, &day, &count);
// flag=(year%4==0&&year%100!=0)||(year%400==0);
// count+=day;
// for(int i=month;i<13;i++){
// if(count-daytab[flag][i]>0)
// {
// count-=daytab[flag][i];
// continue;
// }
// else if(count-daytab[flag][i]==0){
// month=i;
// day=daytab[flag][i];
// break;
// }
// else{
// month=i;
// day=count;
// break;
// }
// }
// if(i==13)
// {
// year++;
// flag=(year%4==0&&year%100!=0)||(year%400==0);
// for(int i=month;i<13;i++){
// if(count-daytab[flag][i]>0)
// {
// count-=daytab[flag][i];
// continue;
// }
// else if(count-daytab[flag][i]==0){
// month=i;
// day=daytab[flag][i];
// break;
// }
// else{
// month=i;
// day=count;
// break;
// }
// }
// }
//Caution:天数可能跨年,可能跨很多年,这样太麻烦了;
//答案直接计算最后的年份,月份,日期
//先把今年的都加在一起
flag = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
for (int i = 1; i < month; i++) {
count += daytab[flag][i];
}
count += day;
while (count > 365 + flag) {
year++;
count -= 365 + flag;
flag = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
month = 1;
while (count > daytab[flag][month]) {
count -= daytab[flag][month];
month++;
}
day = count;
printf("%d-%02d-%02d\n", year, month, day);
}
}
Caution:天数可能跨年,可能跨很多年,这样太麻烦了;
答案直接计算最后的年份,月份,日期
先把今年的都加在一起
需要注意的是,本题不是只有一次输入,不是未告知具体有多少组输入,而是明确告知有m组输入

京公网安备 11010502036488号