利用進位算天數、巧用二維陣列儲存平潤二月
阿新 • • 發佈:2021-01-09
http://codeup.hustoj.com/problem.php?cid=100000578&pid=0
問題 A: 日期差值
[命題人 : 外部匯入]
時間限制 : 1.000 sec記憶體限制 : 32 MB
題目描述
有兩個日期,求兩個日期之間的天數,如果兩個日期是連續的我們規定他們之間的天數為兩天。
輸入
有多組資料,每組資料有兩行,分別表示兩個日期,形式為YYYYMMDD
輸出
每組資料輸出一行,即日期差值
樣例輸入 Copy
20130101
20130105
樣例輸出 Copy
5
#include<bits/stdc++.h> using namespace std; const int maxn=105; int isrun(int y){ if(y%400==0||y%4==0&&y%100!=0) return 1; return 0; } //巧用二維陣列儲存平潤二月 int month[13][2]={{0,0},{31,31},{28,29},{31,31},{30,30}, {31,31},{30,30},{31,31},{31,31}, {30,30},{31,31},{30,30},{31,31}}; int main(){ int a,b; while(scanf("%d%d",&a,&b)!=EOF){ int ans=1; if(a>b){ int temp=a;a=b;b=temp; } int y1=a/10000,m1=a/100%100,d1=a%100; int y2=b/10000,m2=b/100%100,d2=b%100; //printf("%d %d %d\n%d %d %d\n",y1,m1,d1,y2,m2,d2); while(y1!=y2||m1!=m2||d1!=d2){//利用進位算天數 d1++; if(d1==month[m1][isrun(y1)]+1){ d1=1; m1++; } if(m1==13){ y1++; m1=1; } ans++; } printf("%d\n",ans); } return 0; }