試題編號: | 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;
}