HDU4545+計算日期

來源:互聯網
上載者:User
/*計算過了D天后的日期之前D天的日期*/#include<stdio.h>int judge_year( int year ){    if( (year%4==0&&year%100!=0)||(year%400==0) )        return true;    else        return false;}int judge_month( int mon ){    if( mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12 )         return true;    else        return false;}int main(){    int ca;    //freopen("cmp.txt","w",stdout);    scanf("%d",&ca);    while( ca-- ){        int n;        scanf("%d",&n);        int year,mon,day;        year = 2013;        mon = 3;        day = 24;        int sum = n;        while( sum>0 ){            if( judge_year(year)==true ){                               //printf("sum=%d,,year = %d,mon=%d,day=%d\n",sum,year,mon,day);                    if( mon==2 ){                        int left = 29-day;                        if( sum>left ){                            sum = sum-(left+1);                            mon++;                            day = 1;                                        }                        else if( sum==left ){                            sum = 0;                            day = 29;                                    }                        else {                            day += sum;                            sum = 0;                        }                        }                    else if( judge_month( mon )==true ){                        int left = 31-day;                        if( sum>left ){                            sum = sum-left-1;                            mon++;                            if( mon>12 ) {                                year++;                                mon = 1;                            }                            day = 1;                        }                        else if( sum==left ){                            sum = 0;                            day = 31;                        }                        else{                            day += sum;                            sum = 0;                        }                    }                    else {                        int left = 30-day;                        if( sum>left ){                            sum = sum-left-1;                            mon++;                            if( mon>12 ) {                                year++;                                mon = 1;                            }                            day = 1;                        }                        else if( sum==left ){                            sum = 0;                            day = 30;                        }                        else{                            day += sum;                            sum = 0;                        }                    }                            }//閏年            else{                                    if( mon==2 ){                        int left = 28-day;                        if( sum>left ){                            sum = sum-left-1;                            mon++;                            day = 1;                        }                        else if( sum==left ){                            sum = 0;                            day = 28;                        }                        else {                            day += sum;                            sum  = 0;                        }                        }                    else if( judge_month( mon )==true ){                        int left = 31-day;                        if( sum>left ){                            sum = sum-left-1;                            mon++;                            if( mon>12 ) {                                year++;                                mon = 1;                            }                            day = 1;                        }                        else if( sum==left ){                            sum = 0;                            day = 31;                        }                        else{                            day += sum;                            sum = 0;                        }                    }                    else {                        int left = 30-day;                        if( sum>left ){                            sum = sum-left-1;                            mon++;                            if( mon>12 ) {                                mon = 1;                                year++;                            }                            day = 1;                        }                        else if( sum==left ){                            sum = 0;                            day = 30;                        }                        else{                            day += sum;                            sum = 0;                        }                    }                            }//不是閏年            if( sum<=0 )                 break;        }//向後D天的日期        printf("%04d/%02d/%02d ",year,mon,day);        year = 2013;        mon = 3;        day = 24;        sum = n;        while( sum>0 ){            if( judge_year( year )==true ){                if( sum>=366 ){                    sum-=366;                    year--;                }                else{                    if( mon==3 ){                        int left = day;                        if( sum>=29 ){                            sum-=29;                            mon--;                        }                        else {                            if( sum==left-1 ){                                sum = 0;                                day = 1;                            }                            else if( sum<left-1 ){                                day -= sum;                                sum = 0;                            }                            else {                                sum -= left;                                day = 29;                                mon--;                            }                        }                    }                    else if( mon==5||mon==7||mon==10||mon==12 ){                        int left = day;                        if( sum>=30 ){                            sum-=30;                            mon--;                        }                        else {                            if( sum==left-1 ){                                sum = 0;                                day = 1;                            }                            else if( sum<left-1 ){                                day -= sum;                                sum = 0;                            }                            else {                                sum -= left;                                day = 30;                                mon--;                            }                        }                    }                    else {                        int left = day;                        if( sum>=31 ){                            sum-=31;                            mon--;                            if( mon<=0 ){                                year--;                                mon=12;                            }                        }                        else {                            if( sum==left-1 ){                                sum = 0;                                day = 1;                            }                            else if( sum<left-1 ){                                day -= sum;                                sum = 0;                            }                            else {                                sum -= left;                                day = 31;                                mon--;                                if( mon==0 ){                                    mon = 12;                                    year--;                                }                            }                        }                    }                }            }//閏年            else {                if( sum>=365 ){                    sum-=365;                    year--;                }                else{                    if( mon==3 ){                        int left = day;                        if( sum>=28 ){                            sum-=28;                            mon--;                        }                        else {                            if( sum==left-1 ){                                sum = 0;                                day = 1;                            }                            else if( sum<left-1 ){                                day -= sum;                                sum = 0;                            }                            else {                                sum -= left;                                day = 28;                                mon--;                            }                        }                    }                    else if( mon==5||mon==7||mon==10||mon==12 ){                        int left = day;                        if( sum>=30 ){                            sum-=30;                            mon--;                        }                        else {                            if( sum==left-1 ){                                sum = 0;                                day = 1;                            }                            else if( sum<left-1 ){                                day -= sum;                                sum = 0;                            }                            else {                                sum -= left;                                day = 30;                                mon--;                            }                        }                    }                    else {                        int left = day;                        if( sum>=31 ){                            sum-=31;                            mon--;                            if( mon==0 ){                                year--;                                mon=12;                            }                        }                        else {                            if( sum==left-1 ){                                sum = 0;                                day = 1;                            }                            else if( sum<left-1 ){                                day -= sum;                                sum = 0;                            }                            else {                                sum -= left;                                day = 31;                                mon--;                                if( mon==0 ){                                    mon = 12;                                    year--;                                }                            }                        }                    }                }            }//不是閏年            if( sum<=0 ) break;        }        printf("%04d/%02d/%02d\n",year,mon,day);    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.