C/C++ 結構體(兩個日期間的天數)
阿新 • • 發佈:2018-12-12
題目描述
求兩個日期d1,d2之間相差的天數d2-d1。
輸入
輸入資料有若干組。每組資料一行,有六個整數,表示兩個日期d1,d2,格式為:年月日。
輸出
對於每一組資料,輸出兩個日期d1,d2之間相差的天數, 格式參照樣例輸出。
樣例輸入
2000 1 1 2002 10 1 2010 1 10 2010 3 20
樣例輸出
2002/10/1-2000/1/1=1004 2010/3/20-2010/1/10=69
#include <stdio.h> int daysOfMonth(int y,int m); //計算任意兩個日期之間的天數 //判斷輸入有效 int valiDate(int y,int m,int d){ if(y>3000||y<1900){ printf("error year!\n"); return 1; } if(m>12||m<1){ printf("error month!\n"); return 1; } if(d>daysOfMonth(y,m)||d<1){ printf("error day!\n"); return 1; } return 0; } //一個整月的天數 int daysOfMonth(int y,int m){ if(m==2){ if(y%4==0&&y%100!=0||y%400==0){ return 29; }else{ return 28; } }else if(m==4||m==6||m==9||m==11){ return 30; }else{ return 31; } } //輸入年份已經過的天數 int daysBefore(int y,int m,int d){ int i,result=0; for(i=1;i<=12;i++){ if(i==m){ result += d; return result; }else{ result += daysOfMonth(y,i); } } } //計算每年天數 int daysOfYear(int y){ if(y%4==0&&y%400!=0||y%400==0){ return 366; }else return 365; } //主函式 int main(){ int y1,m1,d1,y2,m2,d2; while(scanf("%d%d%d",&y1,&m1,&d1)!=EOF) { while(valiDate(y1,m1,d1)){ scanf("%d%d%d",&y1,&m1,&d1); } scanf("%d%d%d",&y2,&m2,&d2); while(valiDate(y2,m2,d2)){ scanf("%d%d%d",&y2,&m2,&d2); } int i,result=0; for(i=y1;i<y2;i++){ result += daysOfYear(i); } result = result - daysBefore(y1,m1,d1) + daysBefore(y2,m2,d2); printf("%d/%d/%d-%d/%d/%d=%d\n",y2,m2,d2,y1,m1,d1,result); } return 0; }