1. 程式人生 > 其它 >利用進位算天數、巧用二維陣列儲存平潤二月

利用進位算天數、巧用二維陣列儲存平潤二月

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;
}