样例过了,直接爆0,求各位大佬看看
查看原帖
样例过了,直接爆0,求各位大佬看看
1244772
leixinranYY楼主2024/9/4 10:24
#include<bits/stdc++.h>
using namespace std;
bool f1(long long x)//判断闰年 
{
	if(x%100==0)
	{
		if(x%400==0)return true;
		else return false;
	}
	else
	{
		if(x%4==0)return true;
		else return false;
	}
}
long long t,n,y,r,s,f,m,x,ay[20]={0,86400*31,86400,86400*31,86400*30,86400*31,86400*30,86400*31,86400*31,86400*30,86400*31,86400*30,86400*31};
long long sum,sumf;
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		sum=0;
		scanf("%d-%d-%d %d:%d:%d",&n,&y,&r,&s,&f,&m);
		scanf("%d",&x);
		x*=60;
		//算秒数 
		for(int i=1970;i<=n;i++)
		{
			if(f1(i))sum+=31622400;
			else sum+=31536000;
		}
		for(int i=1;i<=y;i++)
		{
			if(f1(n) && i==2)sum+=ay[i]*29;
			else if(!f1(n) && i==2)sum+=ay[i]*28;
			else sum+=ay[i];
		}
		sum+=(r*86400+s*3600+f*60+m);
		while(sum%x!=0)sum--;
		n=1970;
		while(true)//年份 
		{
			if(f1(n))
			{
				if(sum<31622400)break;
				else
				{
					sum-=31622400;
					n++;
				}
			}
			else
			{
				if(sum<31536000)break;
				else
				{
					sum-=31536000;
					n++;
				}
			}
		}
		n--;
		y=0;
		while(true)//月份 
		{
			if(sum<86400*28)break;//算完了
			else
			{
				if(f1(n) && y==2)sum-=ay[y]*29,y++;
				else if(!f1(n) && y==2)sum-=ay[y]*28,y++;
				else sum-=ay[y],y++;
			}
		}
		y--;
		r=0;
		while(sum>=86400)//日期 
		{
			sum-=86400;
			r++;
		}
		//计算时分秒 
		s=sum/3600;
		sum%=3600;
		f=sum/60;
		sum%=60;
		m=sum;
		sum=0;
		//输出 
		printf("%d-",n);
		if(y<10)printf("0%d-",y);
		else printf("%d-",y);
		if(r<10)printf("0%d ",r);
		else printf("%d ",r);
		if(s<10)printf("0%d:",s);
		else printf("%d:",s);
		if(f<10)printf("0%d:",f);
		else printf("%d:",f);
		if(m<10)printf("0%d\n",m);
		else printf("%d\n",m);
	}
	return 0;
}
2024/9/4 10:24
加载中...