题意:给出年分m和一年中的第n天,算出第n天是几月几号。
输入:
2000 3
2000 31
2000 40
2000 60
2000 61
2001 60
输出:
2000-01-03
2000-01-31
2000-02-09
2000-02-29
2000-03-01
2001-03-01
思路:如果输入的day小于月份对应的天数,那么day就是对应的天数;如果输入的day大于月份对应的天数,那么就用day减去月份对应的天数,得到的newday如果小于了月份对应的天数,则停止;如果还是大于对应的天数,则继续循环day减去月份对应的天数步骤,直到小于了则停止。
这里月份对应的天数:采用getmonthday函数来求解。
注意:1. 如果采用Data类来实现,构造函数的设计可以采用无参构造。
2. 核心打印函数的设计:循环过程中,循环变量控制的是月份(从1月到12月),如思路中的描述,如果day<getmonthday(),月份就增1。同时,循环变量还控制了getmonthday函数,否则就将循环变量复制给month,得到我们想要的month和day。
// 测试程序
int main()
{
int year, n;
while(cin >> year >> n)
{
Data d1;
d1.print(year,n);
}
}
// 核心打印函数
void print(int year ,int n)
{
int month = 1;
for(int i = 1;i <= 12; i++)
{
if(n > getmonthday(year,i));
{
n = n - getmonthday(year ,i);
}
else
{
month = i;
break;
}
}
printf("%4d-%02d-%02d\n",year,month,n);
}
int getmonthday(int year ,int month)
{
int monthday[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
if(month == 2 && (year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
return 29;
}
else
return monthday[month];
}
class Data
{
public:
Data()
{}
int getmonthday()
{}
void print()
{}
private:
int _year;
int _month;
int _day;
};