题解 | #日期累加#

日期累加

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组输入

全部评论

相关推荐

今天 20:14
已编辑
叮咚买菜
牛客吹哨人:建议细说...哨哥晚点统一更新到黑名单:不要重蹈覆辙!25届毁意向毁约裁员黑名单https://www.nowcoder.com/discuss/1317104
叮咚买菜稳定性 10人发布 投递叮咚买菜等公司10个岗位 >
点赞 评论 收藏
分享
10-31 14:54
已编辑
门头沟学院 算法工程师
点赞 评论 收藏
分享
拒绝无效加班的小师弟很中意你:求职意向没有,年龄、课程冗余信息可以删掉,需要提升项目经历。排版需要修改。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务