嘿嘿嘿灬 2020-01-20 00:06 采纳率: 0%
浏览 1432

求指定日期前后n天的日期

bei'zhan蓝桥杯的一道练习题:

给定一个日期:2013年3月24日,求从这个日期开始往前n天和往后n天的日期。

输入:

输入首先包含一个整数N,表示有N组测试用例;

接下来N行是N组数据,每一行包含一个正整数D(D<=10,0000),

D表示穿越的天数。

输出:

分别输出向前走D天和向后走D天的日期,两个日期中间用一个空格隔开,每组数据占一行。

样例输入:

2

6

30

样例输出:

2013/03/30 2013/03/18

2013/04/23 2013/02/22

下面是我写的代码,总是答案错误,我又试了好多例子都没什么问题,求指点
#include

int Leap(int year)//判断闰年函数 
{
    if((year%4==0&&year%100!=0)||(year%400==0))
        return 1;
    return 0;
}

void transit(int d)
{
    int year=2013,month=3,day=24,i;
    int by=year,bm=month,bd=day;
    int gy=year,gm=month,gd=day;
//by,bm,bd分别表示向未来经过d天的年月日,gy,gm,
gd分别表示向过去走d天后的年月日 
for(i=1;i<=d;i++)
{
    bd++;//向未来走d天 
    if(bm==1||bm==3||bm==5||bm==7||bm==8||bm==10)//当月份天数为31天的时候 
    {
        if(bd==32)
        {
            bd=1;
            bm++;
        }
    }
    if(bm==2)//二月因为分闰年平年所以单独判断 
    {
        if(Leap(by)&&bd==30)
        {
            bd=1;
            bm++;
        }
        else
        {
            if(bd==29)
            {
                bd=1;
                bm++;
            }
        }
    }
    if(bm==4||bm==6||bm==9||bm==11)//月份天数为30天的时候 
    {
        if(bd==31)
        {
            bd=1;
            bm++;
        }
    }
    if(bm==12)//12月因为涉及到年份的增加所以单独判断 
    {
        if(bd==32)
        {
            bd=1;
            bm=1;
            by++;
        }
    }
    gd--;//向过去走d天 
    if(gm==2||gm==4||gm==6||gm==8||gm==9||gm==11)//月份天数为31天 
    {
        if(gd==0)
        {
            gd=31;
            gm--;
        }
    }
    if(gm==3)//二月 
    {
        if(gd==0)
        {
            gm--;
            if(Leap(gy))
                gd=29;
            else
                gd=28;
        }
    }
    if(gm==5||gm==7||gm==10||gm==12)//月份天数为30天 
    {
        if(gd==0)
        {
            gd=30;
            gm--;
        }
    }
    if(gm==1)//1月因为涉及到年份的减少所以单独判断 
    {
        if(gd==0)
        {
            gd=31;
            gm=12;
            gy--;
        }
    }
}
//输出日期,月和日如果只有一位数则在前面补零 
if(bm/10==0)
{
    if(bd/10==0)
        printf("%d/0%d/0%d ",by,bm,bd);
    else
        printf("%d/0%d/%d ",by,bm,bd);
}
else
{
    if(bd/10==0)
        printf("%d/%d/0%d ",by,bm,bd);
    else
        printf("%d/%d/%d ",by,bm,bd);
}
if(gm/10==0)
{
    if(gd/10==0)
        printf("%d/0%d/0%d\n",gy,gm,gd);
    else
        printf("%d/0%d/%d\n",gy,gm,gd);
}
else
{
    if(gd/10==0)
        printf("%d/%d/0%d\n",gy,gm,gd);
    else
        printf("%d/%d/%d\n",gy,gm,gd);
}
}

int main()
{
    int n,d;
    scanf("%d",&n);//n组数据,天数为d 
    while(n--)
    {
        scanf("%d",&d);
        transit(d);
    }
    return 0;
}
  • 写回答

1条回答 默认 最新

  • threenewbee 2020-01-20 09:27
    关注

    没有信用,没有选上也没有采纳率,就不详细回答了,参考:https://blog.csdn.net/qq_42817826/article/details/81582935

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)