#include<iostream>
using namespace std;
int main()
{
int year,m,d,num,M[12]={31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d/%d/%d",&year,&m,&d);
scanf("%d",&num);
while(num>0)
{
if(num>M[m-1]-d+1) //超过本月
{
if(year%400==0||year%4==0&&year%100!=0) //闰年判断
M[1]=29;
num=num+d-M[m-1];
m++;
d=0;
if(m>12) //超过本年
{
m=1;
d=0;
year++;
}
}
else
{
d+=num;
break;
}
}
cout<<year;
printf("/%02d/%02d\n",m,d);
}
#include<iostream>
using namespace std;
int main()
{
int year,m,d,num,M[12]={31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d/%d/%d",&year,&m,&d);
scanf("%d",&num);
while(num>0)
{
if(year%400==0||(year%4==0&&year%100!=0)) //闰年判断 应该放最前面
M[1]=29;
else
M[1]=28; //year是变的,有闰年就应该有平年
if(num>M[m-1]-d) //超过本月 不用再加一
{
num=num+d-M[m-1];
m++;
d=0;
if(m>12) //超过本年
{
m=1;
d=0;
year++;
}
}
else
{
d+=num;
break;
}
}
printf("%4d/%02d/%02d\n",year,m,d);
}
供参考:
#include<stdio.h>
int isLeap(int y)
{
return ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0));
}
int Getdaysofmonth(int y, int m)
{
int days[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
if (m == 2 && isLeap(y)) return days[m - 1] + 1;
return days[m - 1];
}
int main()
{
int y, d, m, n;
scanf("%d/%d/%d%d", &y, &m, &d, &n);
for (m; n > Getdaysofmonth(y, m) - d; n -= Getdaysofmonth(y, m) - d, d = 0, ++m > 12 ? (m = 1, y++) : m);
printf("%04d/%02d/%02d", y, m, n + d);
return 0;
}