此题关键是在月和年的递增,闰年的判断,在这里我的思路是先把日期归为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;
}
不喜勿喷