题解 | #日期累加#
日期累加
https://www.nowcoder.com/practice/eebb2983b7bf40408a1360efb33f9e5d
#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组输入