Problem Description
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
1985/1/20
2006/3/12
Sample Output
20
71
这题看似很简单,且有多种解法,但是也有些坑(可能是我个人学艺不精的原因吧~)
下面是参考代码
#include <iostream>
using namespace std;
int main()
{
int a[100],x,y,z,i,m;
char e,f;
a[1]=31,a[2]=28,a[3]=31,a[4]=30,a[5]=31,a[6]=30,a[7]=31,a[8]=31,a[9]=30,a[10]=31,a[11]=30,a[12]=31;
while(cin>>x>>e>>y>>f>>z)
{
m=0;
a[2]=28; //此处不可省略,因为while多重循环,必须将a[2]重置为28
if(x%4==0 && (x%100!=0 || x%400==0) )
a[2]=29;
for(i=1;i<y;i++)
m=m+a[i];
cout<<m+z<<endl;
}
}
注意:
1.输入YYYY/MM/DD 可以令"/"为个字符串。
如: char e,f; 这样通过下面的代码就过滤掉了 e,f 两个’/'字符
..........
while(cin>>x>>e>>y>>f>>z)
..........
2.while(cin >> x >> y >> z)
这种输入方式也可以处理多数据
同:
-
while( scanf("%d%d%d", &x, &y, &z) )
-
while( scanf("%d%d%d", &x, &y, &z) != EOF )
-
while( ~scanf("%d%d%d", &x, &y, &z) )