试题编号: | 201509-2 |
试题名称: | 日期计算 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? 输入格式 输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。 输出格式 输出两行,每行一个整数,分别表示答案的月份和日期。 样例输入 2015 样例输出 3 样例输入 2000 样例输出 2 |
C++实现:
方法一:
解题技巧:将每个月的天数存放在一个数组里
#include<iostream>
using namespace std;
int main()
{
int y,d,month,day,sum=0;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
cin>>y;
if( y>1899 && y<2016 )
cin>>d;
else
cout<<"error!"<<endl;
day=d;
if((y%4==0&&y%100!=0)||(y%400==0)) //闰年
m[2]++;
for(int i=0;i<13;i++)
{
sum+=m[i];
if(d<=sum)
{
month=i;
break;
}
day-=m[i];
}
cout<<month<<endl<<day<<endl;
return 0;
}
方法二:
如果考试时想不出来做题的技巧,可以采用这种笨办法,自己笔算,然后直接输入代码所需的数值
#include<iostream>
using namespace std;
int main()
{
int y,d,month,day;
cin>>y;
if(y>1899&&y<2016)
cin>>d;
else
cout<<"error!"<<endl;
if(d<32) //第一个月
{ month=1;day=d;}
else if((y%4==0&&y%100!=0)||(y%400==0)) //闰年
{
if(d<61)
{month=2;day=d-31;}
else if(d<92)
{month=3;day=d-60;}
else if(d<122)
{month=4;day=d-91;}
else if(d<153)
{month=5;day=d-121;}
else if(d<183)
{month=6;day=d-152;}
else if(d<214)
{month=7;day=d-182;}
else if(d<245)
{month=8;day=d-213;}
else if(d<275)
{month=9;day=d-244;}
else if(d<306)
{month=10;day=d-274;}
else if(d<336)
{month=11;day=d-305;}
else if(d<367)
{month=12;day=d-335;}
}
else //平年
{
if(d<60)
{month=2;day=d-31;}
else if(d<91)
{month=3;day=d-59;}
else if(d<121)
{month=4;day=d-90;}
else if(d<152)
{month=5;day=d-120;}
else if(d<182)
{month=6;day=d-151;}
else if(d<213)
{month=7;day=d-181;}
else if(d<244)
{month=8;day=d-212;}
else if(d<274)
{month=9;day=d-243;}
else if(d<305)
{month=10;day=d-273;}
else if(d<335)
{month=11;day=d-304;}
else if(d<366)
{month=12;day=d-334;}
}
cout<<month<<endl<<day<<endl;
return 0;
}