3218.日期问题
法一
#include <iostream>
#include <cstdio>
using namespace std;
int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int n) //判断是否是闰年
{
if (n%4==0&&n%100!=0||n%400==0) return true;
return false;
}
int main()
{
int y,d;
cin>>y>>d;
if (check(y)) months[2]++; //闰年2月29天
int month=1;
while (d)
{
if (d<=months[month])
{
break;
}
else
{
d-=months[month];
month++;
}
}
cout<<month<<endl<<d<<endl;
return 0;
}
法二
#include <iostream>
#include <cstdio>
using namespace std;
int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int days(int year,int month) //求某年某月有多少天
{
if (month!=2) return months[month];
else
{
int leap=(year%4==0&&year%100!=0||year%400==0);
return months[2]+leap;
}
}
int main()
{
int y,d;
cin>>y>>d;
int ans=0; //统计过了多少天
for (int i=1;i<=12;i++) //枚举每个月份
{
for (int day=1;day<=days(y,i);day++) //枚举每个月的每一天
{
ans++;
if (ans==d)
{
printf("%d\n%d\n",i,day);
return 0;
}
}
}
return 0;
}