1.用空间换时间,首先将闰年和平年的每月的天数都分别存起来
2.闰年判断规则:当年数不能被100整除时,但能被4整除或能被400整除,则为闰年。
#include
using namespace std;
int daytab[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},//最开始的零是为了在下面加每月的天数时更方便,比如9月30日,那么就要加前八个月和九月的这三十天
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
bool IsLeapYear(int year){ ///判断闰年规则
return (year%40&&year%100!=0)||(year%4000);
}
int main() {
int year,month,day;
while(cin>>year>>month>>day){
int number=0;
int row=IsLeapYear(year);
for(int j=0;j<month;j++)
{
number+=daytab[row][j];
}
number+=day;
cout<<number<<endl;
}
return 0;
}
反问题:已知年份和今年的第几天,求几月几号?
#include
using namespace std;
int daytab[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
bool IsLeapYear(int year){
return (year%40&&year%100!=0)||(year%4000);
}
int main() {
int year,month,day,n;
while(cin>>year>>n){
month=0;
int j=0;
int row=IsLeapYear(year);
while(n>daytab[row][month])
{
n-=daytab[row][month];
month++;
}
day=n;
printf("%04d-%02d-%02d\n",year,month,day);
}
return 0;
}