1 条题解

  • 0
    @ 2025-5-19 21:44:00
    #include<stdio.h>
    #include<string.h>
    int leap[50010];
    //int isRunNian(int year);
    int DiJiTian(int year,int month,int day);
     
    void is_leap()
    {
    	int i,j;
    	memset(leap,0,sizeof(leap));
    	for(i=2000;i<=50000;i++)
    	{
    		if(i%400==0||(i%4==0&&i%100!=0))
    			leap[i]=1;
    		else
    			leap[i]=0;
    	}
    }
     
    int main()
    {
    	int hour,minute,second,day,month,year;
    	int mhour,mmin,msec,mday,mmonth,myear;
    	char c1,c2,c3,c4,c5;
    	int s;
    	is_leap();
    	scanf("%d",&s);
    	while(s--)
    	{
    		scanf("%d%c%d%c%d%c%d%c%d%c%d",&hour,&c1,&minute,&c2,&second,&c3,&day,&c4,&month,&c5,&year);
    		int i,sum=0;
    		for(i=2000;i<year;i++)
    		{
    			if(leap[i])
    				sum+=366;
    			else
    				sum+=365;
    		}
    		sum += DiJiTian(year,month,day);
    		myear=sum/1000;		sum%=1000;
    		mmonth=sum/100+1;	sum%=100;
    		mday=sum+1;
    		
    		sum=(hour*3600+minute*60+second)*125/108;// 题意是说一天的时间是一样的 ,所以100000/(24*3600)=125/108 
    		mhour=sum/10000;	sum%=10000;
    		mmin=sum/100;	sum%=100;
    		msec=sum;
    		printf("%d%c%d%c%d%c%d%c%d%c%d\n",mhour,c1,mmin,c2,msec,c3,mday,c4,mmonth,c5,myear);
    	}
    	return 0;
    } 
     
     
    //int isRunNian(int year)
    //{
    //	if(year%400==0||(year%4==0&&year%100!=0))
    //		return 1;
    //	else
    //		return 0;
    //}
     
    int DiJiTian(int year,int month,int day)//求当前这已经过了多少天
    {
    	int i,sum=0;
    	for(i=1;i<month;i++)
    	{
    		if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
    			sum+=31;
    		else if(i==4||i==6||i==9||i==11)
    			sum+=30;
    		else if(i==2)
    		{
    			if(leap[year])
    				sum+=29;
    			else
    				sum+=28;
    		}
    	}
    	sum+=day-1;
    	return sum;
    }
    
    • 1

    信息

    ID
    1212
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者