POJ2210

#include <stdio.h>
//#define M 0.864
int nuenian(int n);
int tianshu(int year,int month,int day);
int main()
{
    int N;
    scanf("%d",&N);
    while(N--)
    {
        int  sum=0, L;
        int day, month, year, hour, minute,second;
        int year1,month1,day1,hour1,minute1,second1;
        scanf("%d:%d:%d",&hour,&minute,&second);
        scanf("%d.%d.%d",&day,&month,&year);
        /*for(i=2000;i<year;i++)
        {
            if(nuenian(i))
            sum+=366;
            else
            sum+=365;
        }*/
        if(year!=2000)       //这点应该这样判断,要是像上边注释的样子会超时的,因为是到50000
        {
            sum+=366+365*(year-1-2000)+(year-1-2000)/4-(year-1-2000)/100+(year-1-2000)/400;    //假如1~sum中有多少个数能被n整除除了用for一个个的枚举,也可以直接sum/n
        }
        sum+=tianshu(year,month,day);
        //printf("%d\n",sum);
        year1=sum/1000;
        month1=sum%1000/100+1;    //注意这点的+1,因为是从1号就开始了的
        day1=sum%1000%100+1;
        L=hour*60*60+minute*60+second;
        //L=(int)((double)(L)/M);
        L=L*125/108;   //转化成题目要求的日历的总秒数
        hour1=L/(100*100);
        //printf("%d\n",hour1);
        minute1=L%(100*100)/100;
        //printf("%d\n",minute1);
        second1=L%(100*100)%100;
        printf("%d:%d:%d %d.%d.%d\n",hour1,minute1,second1,day1,month1,year1);

    }
    return 0;
}
int nuenian(int n)
{
    if((n%4==0&&n%100!=0)||n%400==0)
    return 1;
    else
    return 0;
}
int tianshu(int year,int month,int day)
{
    int i, sum=0;
    for(i=month-1;i>=1;i--)
    {
        if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
        sum+=31;
        if(i==2)
        {
            if(nuenian(year))
            sum+=29;
            else
            sum+=28;
        }
        if(i==4||i==6||i==9||i==11)
        sum+=30;
    }
    sum+=(day-1);
    return sum;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值