北大2080、杭电1076关于日期处理的问题

北大第2080题http://poj.org/problem?id=2080

问题大意是,给你一个数(n),然后从2000年1月1日起,输出n天后是哪一年,几月几号,星期几。

#include<stdio.h>
int rm[]={31,29,31,30,31,30,31,31,30,31,30,31};  //闰年
int pm[]={31,28,31,30,31,30,31,31,30,31,30,31};   //平年
int isp(int year)
{
    if((year%4==0&&year%100!=0)||year%400==0) return 1;   
    
    return 0; 
}
int main()
{
    
    int y,m,n,d,dd,day;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==-1)break;
        y=2000,m=0,day=n;
        while(n>=(isp(y)?366:365))
        {
            n=n-(isp(y)?366:365);
            y++;
        }
        while(n>=(isp(y)?rm[m]:pm[m]))
        {
            n=n-(isp(y)?rm[m]:pm[m]);
            m=(m+1)%12;
        }
        d=n%(isp(y)?rm[m]:pm[m])+1;
        m=m+1;
        printf("%d",y);
        m<10?printf("-0%d",m):printf("-%d",m);
        d<10?printf("-0%d",d):printf("-%d",d);
        dd=day%7;
        switch(dd)
        {
        case 0 : printf(" Saturday\n");break;
        case 1 : printf(" Sunday\n");break;
        case 2 : printf(" Monday\n");break;
        case 3 : printf(" Tuesday\n");break;
        case 4 : printf(" Wednesday\n");break;
        case 5 : printf(" Thursday\n");break;
        case 6 : printf(" Friday\n");break;
        }
        
        
    }
    return 0;
}

杭电上第1076题http://acm.hdu.edu.cn/showproblem.php?pid=1076

问题大意是,给你一个年份(year),和一个数(n),从该year开始,期间经过n过平年后是哪个年份。

#include<stdio.h>
int main()
{
    int year,n,m,y,count;  //y:起始年
    scanf("%d",&n);
    while(n--)
    {
        count=0;
        scanf("%d%d",&y,&m);
        for(year=y;;year++)
        {
            if((year%4==0&&year%100!=0)||year%400==0)
            {
                count++;
            }
            if(m==count){
                printf("%d\n",year);
                break;
            }
        }
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/fjlsl/archive/2012/04/30/2477066.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值