输入日期和天数a,计算a天后的日期

此题关键是在月和年的递增,闰年的判断,在这里我的思路是先把日期归为1月1日,得出新的a,再进行计算,不喜勿喷。

计算输入的日期月日共多少天

int f(int y,int m,int d)
{
    int a[12]={31,28,31,30,31,30,31,31,30,31,30,31},i,t=d;
    if((y%4==0&&y%100!=0)||y%400==0) a[1]=29;
    for(i=0;i<m-1;i++)
        t+=a[i];
    return t;
}

计算得出的月日

void h(int a,int y,int m,int d)
{
    int k[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    for(int j=0;j<=11;j++)
        {
            if((a-k[j])>0) m++;
            else 
            {
                d=d+a;
                break;
            }
            a=a-k[j];
        }
    printf("%d-%02d-%02d\n",y,m,d);//输出格式调整
}

综上所得

#include<stdio.h>
int f(int y,int m,int d)
{
    int a[12]={31,28,31,30,31,30,31,31,30,31,30,31},i,t=d;
    if((y%4==0&&y%100!=0)||y%400==0) a[1]=29;
    for(i=0;i<m-1;i++)
        t+=a[i];
    return t;
}
void h(int a,int y,int m,int d)
{
    int k[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    for(int j=0;j<=11;j++)
        {
            if((a-k[j])>0) m++;
            else 
            {
                d=d+a;
                break;
            }
            a=a-k[j];
        }
    printf("%d-%02d-%02d\n",y,m,d);
}
int main()
{
    int t,y,m,d,a;
    scanf("%d",&t);
    while(t--)//控制输入几组数据
    {
        scanf("%d%d%d%d",&y,&m,&d,&a);
        a=a+f(y,m,d);
        int l=y,l2=y;
        m=1;
        d=0;
        if(a>=365)
        {
            y=y+(a/365);//年的增加
            for(;l<=y;l++)
                if((l%4==0&&l%100!=0)||l%400==0) d--;//全当平年,在看包涵了多少闰年,用日来让位
            a=a-(a/365)*365;
            if(a==0)
            {
                a=365;
                if((l2%4==0&&l2%100!=0)||l2%400==0) y--;//是润年但是加了个平年,年要退位
                h(a,y,m,d);
            }
            else h(a,y,m,d);
        }
        else
        {
            if((y%4==0&&y%100!=0)||y%400==0) d--;//就是本年,根据平润调整日
            h(a,y,m,d);
        }
    }
    return 0;
}

不喜勿喷

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值