ACM(gzhu周赛)J - Problem J

原题目:
J - Problem J
给定一个日期,输出这个日期是该年的第几天。

Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。

Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。

Sample Input
1985/1/20
2006/3/12

Sample Output
20
71
题目分析:
这道题要分清闰年的与平年。我以为闰年的年份能被四整除的都是闰年,但是其实不是,这是常识性的错误了。闰年:普通年能整除4且不能整除100的为闰年。世纪年能整除400的是闰年。分清闰年后接下来抽象成数学表达式作为判断条件即可。

AC代码如下:

#include
using namespace std;
int main()
{
 int y, m, d,n;
 char s;
 while (cin >> y >> s >> m >> s >> d)
 {
  if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
  {
   if (m == 1)  n= d;
   if (m == 2)  n= 31 + d;
   if (m == 3) n= 60 + d;
   if (m == 4) n= 91 + d;
   if (m == 5) n =121 + d;
   if (m == 6) n= 152 + d;
   if (m == 7)n= 182 + d;
   if (m == 8)n= 213 + d;
   if (m == 9) n= 244 + d;
   if (m == 10) n= 274 + d;
   if (m == 11) n= 305 + d;
   if (m == 12) n= 335 + d;
  }
  else
  {
   if (m == 1)  n = d;
   if (m == 2)  n = 31 + d;
   if (m == 3) n = 59 + d;
   if (m == 4) n = 90 + d;
   if (m == 5) n = 120 + d;
   if (m == 6) n = 151 + d;
   if (m == 7)n = 181 + d;
   if (m == 8)n = 212 + d;
   if (m == 9) n = 243 + d;
   if (m == 10) n = 273 + d;
   if (m == 11) n = 304 + d;
   if (m == 12) n = 334 + d;
  }
  cout << n << endl;
 }
 return 0;
}

你可能感兴趣的:(ACM(gzhu周赛)J - Problem J)