50分,求助大佬们
查看原帖
50分,求助大佬们
351570
Majesty—Lee楼主2021/8/20 18:08
#include<bits/stdc++.h>
using namespace std;

long long q;
long long day[10000001];
long long month[1000001];
long long year[1000001];

long long check(long long mon,long long yea)
{
	if(mon==2)
    {
    	if(yea%4==0&&yea%100!=0) return 29;
    	if(yea%400==0) return 29;
    	return 28;
	}
	if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12) return 31;
	return 30;
}

void pre()
{
	month[0]=day[0]=1;
	for(int i=1;i<146097;i++)//400年天数 
    {
    	day[i]=day[i-1]+1;
    	month[i]=month[i-1];
    	year[i]=year[i-1];
    	if(day[i]>check(month[i],year[i]))
    	{
    		day[i]=1;
    		month[i]+=1;
	    }
        if(month[i]>12)
		{
			month[i]=1;
			year[i]+=1;
		}	
	}
}

int main()
{
	cin>>q;
	pre();
	for(long long i=1;i<=q;i++)
	{
		long long k;
		cin>>k;
		if(k<=2296160)
		{    
		    long long ye;
			ye=k/1461*4-4712;
			k%=1461;
			if(ye+year[k]>0) cout<<day[k]<<" "<<month[k]<<" "<<ye+year[k]<<endl;
		    else cout<<day[k]<<" "<<month[k]<<" "<<1-(ye+year[k])<<" BC"<<endl;
		}
		else
		{
			k+=10;
			if(k<=2305457)
			{
				long long te_data=k%1461;
				long long te_year=k%1461*4;
				int ok=1;
				if(te_data>=366)
				{
					ok=0;
					te_data-=365;
					te_year+=1;
				}
				if(te_data>=366)
				{
					te_data-=365;
					te_year+=1;
				}
				if(te_data>=366)
				{
					te_data-=365;
					te_year+=1;
				}
				if(ok==1) te_data+=1;
				long long sum=0;
				long long mon;
				for(int i=1;i<=12;i++)
				{
					if(ok==1)
					{
					    sum+=check(i,4);
						if(sum>=te_data)
					    {
					 	    mon=i;
						    te_data-=sum-check(i,4);
					    }
					} 
					else sum+=check(i,1);
					if(sum>=te_data)
					{
						mon=i;
						te_data-=sum-check(i,4);
					}
				}
				cout<<te_data<<" "<<mon<<" "<<year<<endl;
			}//1582-1600前
			else
			{
				k-=2305458;
				long long ye=k/146097*400+1600;
				k%=146097;
				cout<<day[k]<<" "<<month[k]<<" "<<ye+year[k]<<endl;
			}
		}
	}
}
2021/8/20 18:08
加载中...