• 某天向前,向后是几月几号


    今天是HRBUST2019级新生赛正赛,小赵和小陈兴高采烈的来到了比赛场上。

    这时,小陈突然想到了前天老师说10天后要检查的大作业,便问小周:“10天后的安卓作业准备的怎么样了?”。

    这时小周问道:“10天?今天是2019年11月16号,上次说的10天到今天算就只有8天了,哪来的10天!想些啥呢你!”。

    小陈:“是是是,你厉害,你算的准,只有8天了,那我问你,50天后是几号?”。

    小周自信的回答道:“今天是16号,加上50就是66,减去这个月的30天就还剩36天,再减去下个月的31天就还剩5天,所以答案是明年的1月5号,怎么样?没算错吧!”

    “再来”,小陈继续问道“100天后呢?200天后呢?”

    这时小周被一连串的问题给问烦了,说道:“你等着,等我写个程序,随便你问”。

           这时小周来找你,请你帮他写出这个程序。

    输入

    题目有多组测试数据,处理到文件结束。

          下面每组测试数据一行一个整数n,请计算出n天后是几号。(-10000<=n<=10000)。

    输出

            每组测试数据输出”YYYY MM DD”代表YYYY年MM月DD日。

    样例输入 Copy

    0
    1
    -1

    样例输出 Copy

    2019 11 16
    2019 11 17
    2019 11 15

    提示

    注意年份用前导0补齐四位,月份和日用前导零补齐两位。

    题目大意:就是说给你今天的日期(如:2019年11月26日)问你向前或者向后n(-10000<=n<=10000)天是那一年那一月那一日

    AC代码:(可能有带你啰嗦,大神勿喷)

    #include <iostream>
    using namespace std;
    int main(){
        int y,m,d,dmax;
        int d1;
        y=2019,m=11,d=16;
        while(~scanf("%d",&d1)){
            if(d1>0){
                for(int i=1;i<=d1;i++){
                        switch(m){
                    case 1:
                    case 3:
                    case 5:
                    case 7:
                    case 8:
                    case 10:
                    case 12:
                        dmax=31;
                        break;
                    case 4:
                    case 6:
                    case 9:
                    case 11:
                        dmax=30;
                       break;
                }
                if(m==2){
                    if(y%400==0||y%100!=0&&y%4==0){
                        dmax=29;    
                    }else{
                        dmax=28;
                    }
                }
                    if(d<dmax){
                        d++;
                    }else if(d==dmax&&m<12){
                        m=m+1;
                        d=1;
                    }else if(m==12&&d==31){
                        y=y+1;
                        m=1;
                        d=1;
                    }
                }
            }
            else if(d1<0){
                d1=-d1;
                for(int i=d1;i>=1;i--){
                        switch(m){
                    case 1:
                    case 2:
                    case 4:
                    case 6:
                    case 8:
                    case 9:
                    case 11:
                        dmax=31;
                        break;
                    case 5:
                    case 7:
                    case 10:
                    case 12:
                        dmax=30;
                       break;
                }
                if(m==3){
                    if(y%400==0||y%100!=0&&y%4==0){
                        dmax=29;    
                    }else{
                        dmax=28;
                    }
                }
                    if(d>1){
                        d--;
                    }else if(d==1&&m>1){
                        m=m-1;
                        d=dmax;
                    }else if(m==1&&d==1){
                        y=y-1;
                        m=12;
                        d=dmax;
                    }
                }
            }
            printf("%04d %02d %02d
    ",y,m,d);
            y=2019,m=11,d=16;
        }
        return 0;
    }

    实例二:

    ZCQ老师的生日是Y年M月D日,他想知道自己出生后第一万天纪念日的日期(出生日算第0天)。
    输入
    只有一行,分别读入Y,M,D(分别代表年、月、日),日期绝对合法。
    (1900<=Y<=2008,1<=M<=12,1<=D<=31)
    输出
    只有一行,即ZCQ老师生日第一万天以后的日期,格式为“Y-M-D”。
    (注意年月日之间用横线连接)
    样例输入 Copy
    1979 4 16
    样例输出 Copy
    2006-9-1
    #include <iostream>
    using namespace std;
    int main() {
        int y,m,d,dmax;
        cin>>y>>m>>d;
        for(int i=1;i<=10000;i++){//把10000改为任意数就变成任意天后的日期
                switch(m){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                dmax=31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                dmax=30;
               break;
        }
        if(m==2){
            if(y%400==0||y%100!=0&&y%4==0){
                dmax=29;    
            }else{
                dmax=28;
            }
        }
            if(d<dmax){
                d++;
            }else if(d==dmax&&m<12){
                m=m+1;
                d=1;
            }else if(m==12&&d==31){
                y=y+1;
                m=1;
                d=1;
            }
        }
        cout<<y<<"-"<<m<<"-"<<d;
        return 0;
    }
  • 相关阅读:
    Thymeleaf基本知识
    Hibernate学习总结
    oracle学习笔记第三天
    oracle学习笔记第二天
    oracle学习笔记第一天
    Cloudera Hadoop 环境搭建(离线安装)
    SpringBoot搭建基于Apache Shiro+Redis的分布式Session共享功能
    SpringBoot搭建基于Apache Shiro的权限管理功能
    Mybatis基于SqlSession实现CRUD
    Mybatis基于接口注解配置SQL映射器(二)
  • 原文地址:https://www.cnblogs.com/lipu123/p/12159162.html
Copyright © 2020-2023  润新知