`
xxx0624
  • 浏览: 32120 次
文章分类
社区版块
存档分类
最新评论

HDU4545+计算日期

 
阅读更多
/*
计算过了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;
}

分享到:
评论

相关推荐

    hdu 2000 -2099 题集

    这些题目来自于杭州电子科技大学的在线评测系统HDU的题集,涵盖了从2000到2009的编号。这些题目旨在测试编程者的基本算法理解、数学计算能力以及问题解决技巧。以下是对这些题目中涉及知识点的详细解释: 1. **2000...

    HDU ACM 2005第几天 txt格式

    根据给定文件的信息,我们可以分析出这是一道与计算日期相关的算法题目,主要涉及的是如何确定一年中的第几天。下面将详细解释此题目的背景、算法思路以及代码实现。 ### 背景介绍 该题目来自HDU ACM(浙江工业...

    HDUACM培训课件

    2009年10月19日的日期可能是指该课件的制作或授课日期。 动态规划的主要知识点包括但不限于以下几点: 1. **基本概念**:动态规划是一种通过将大问题分解成子问题来求解的方法,关键在于找到最优子结构和重叠子...

    杭电acm1099解题

    - **日期计算**:程序的主要功能是计算输入日期距离当年第一天的天数,即通过累加前几个月的天数及当月的天数得到总天数。 ### 5. 代码优化建议 - **可读性**:适当增加代码注释,提高代码的可读性。 - **变量命名...

    HDOJ4515[源代码+数据].DateCalculator

    标题中的“HDOJ4515[源代码+数据].DateCalculator”表明这是一个与在线编程挑战平台HDOJ(HDU Online Judge)上的第4515题相关的项目,题目名为“DateCalculator”。该题可能涉及计算或比较日期的问题。源代码文件...

    博弈论小结by xaphoenix

    例如,在"Calendar Game"中,通过观察日期和月份之和的奇偶性变化,可以确定先手或后手的获胜条件。 接下来,文章介绍了几种经典的博弈模型。巴什博奕(Bash Game)是一个简单的物品分割游戏,威佐夫博弈(Wythoff'...

    用于 FITS图像处理 的简单的基于 scipy 和 python 的工具_python_代码_下载

    例如,`fits.open()`可以打开一个FITS文件,返回一个可以迭代的HDU(Header Data Unit)列表,每个HDU代表文件的一个数据块;`fits.writeto()`则可以将数据写入新的或已存在的FITS文件。 2. **FITS头信息处理**:...

    FITS_stacking:FITS文件堆栈

    Header部分是ASCII文本,存储关于数据的信息,如观测日期、仪器设置等。Data部分可以是图像数据,也可以是表格或其他形式的数据。 **Python中的FITS处理** 在Python中,我们可以使用Astropy库来读取、写入和操作...

Global site tag (gtag.js) - Google Analytics