40分,后面不会判断,大佬给讲解一下呗
查看原帖
40分,后面不会判断,大佬给讲解一下呗
351570
Majesty—Lee楼主2021/8/20 15:02
#include<bits/stdc++.h>
using namespace std;

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

int check(int mon,int 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(int i=1;i<=q;i++)
	{
		int k;
		cin>>k;
		int ye;
		if(k<=2296160)
		{
			ye=k/1461*4-4712;
			k%=1461;
		}
		else
		{
			k-=2299161;
			ye=k/146097*400+1583;
			k%=146097;
		}
		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;
	}
}
2021/8/20 15:02
加载中...