1. 程式人生 > ># 第幾天?

# 第幾天?

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)
這種輸入方式也可以處理多資料
同:

  1. while( scanf("%d%d%d", &x, &y, &z) )

  2. while( scanf("%d%d%d", &x, &y, &z) != EOF )

  3. while( ~scanf("%d%d%d", &x, &y, &z) )