蒟蒻求助,90pts
查看原帖
蒟蒻求助,90pts
244294
__Chtholly楼主2021/10/1 16:38

神奇的一点:同一个程序,4种分数

#include<cstdio>
const int y1[14]={0,31,28,31,30,31,30,31,31,30,31,30,31},y2[14]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int Q;
int R;
int n,y,r;
int read()
{
	int x=0;
	char ch;
	for(;ch<'0'||ch>'9';ch=getchar());
	for(;ch>='0'&&ch<='9';x=x*10+ch-'0',ch=getchar());
	return x;	
}
int main()
{
//	freopen("7075.in","r",stdin);
//	freopen("7075.out","w",stdout);
	for(scanf("%d",&Q);Q;--Q)
	{
		n=0,y=0,r=0;
		R=read();
		if(R<2299161)
		{
			if(R<1721424)
			{
				n=-4713,y=1,r=1;
				n+=(R/1461)*4;
				R%=1461;
				if(R>=366)
				{
					R-=366,n++;
					if(R>=365)R-=365,n++;
					if(R>=365)R-=365,n++;
					if(R>=365)R-=365,n++;
				}	
				while(R)
				{
					if((n+1)%4==0)
					{
						r++;
						if(r>y2[y])
							y++,r=1;	
					}
					else
					{
						r++;
						if(r>y1[y])
							y++,r=1;	
					}
					if(y>12){n++,r=1,y=1;}
					R--;
				}
				printf("%d %d %d BC\n",r,y,-n);
			}
			else
			{
				R-=1721424;
				n=1,y=1,r=1;
				n+=(R/1461)*4;
				R%=1461;
				if(R>=365)
				{
					R-=365,n++;
					if(R>=365)
					{
						R-=365,n++;
						if(R>=365)
						{
							R-=365,n++;
							if(R>=366)R-=366,n++;
						}
					}
				}
				while(R)
				{
					if((n)%4==0)
					{
						r++;
						if(r>y2[y])
							y++,r=1;	
					}
					else
					{
						r++;
						if(r>y1[y])
							y++,r=1;	
					}
					if(y>12){n++,r=1,y=1;}
					R--;
				}
				printf("%d %d %d\n",r,y,n);
			}
		}
		else
		{
			R-=2299161;
			//from 1582.10.15
			/*
			Here
			We should begin from 1600
			So we must cl 1582.10.15~1599.12.31
			*/
			if(R<6287)
			{
				if(R<78)
				{
					n=1582,y=10,r=15;
					while(R)
					{
						r++;
						if(r>y1[y])y++,r=1;
						R--;
					}
					printf("%d %d %d\n",r,y,n);
				}
				else
				{
					R-=78;
					n=1583,y=1,r=1;
					n+=(R/1461)*4;
					R%=1461;
					if(R>=365)
					{
						R-=365;
						n++;
						if(R>=366)
						{
							R-=366;	
							n++;
							if(R>=365)
							{
								R-=365;
								n++;
								if(R>=365)
								{
									R-=365;
									n++;
								}
							}
						}
					}
					while(R)
					{
						if(n%4==0)
						{
							r++;
							if(r>y2[y])r=1,y++;		
						}
						else
						{
							r++;
							if(r>y1[y])r=1,y++;	
						}
						R--;	
					}
					printf("%d %d %d\n",r,y,n);
				}
			}
			else
			{
				int pd=0;
				R-=6287;
				int n=1600,y=1,r=1;
				n+=(R/146097)*400;
				R%=146097;
				if(R>=36525){
					R-=36525;
					n+=100;
					pd++;
					if(R>=36524)
					{
						R-=36524;
						n+=100;
						pd++;
						if(R>=36524)
						{
							R-=36524;
							n+=100;
							pd++;
							if(R>=36524)
							{
								R-=36524;
								n+=100;
								pd++;
							}
						}
					}
				}
				
				if(n%100==0&&n%400!=0)
				{
					if(R>=1460)
						R-=1460,n+=4;	
				}
				n+=(R/1461)*4;
				R%=1461;
				
				if(n%100==0&&n%400!=0)
				{
					if(R>=365)R-=365,n++;	
					if(R>=365)R-=365,n++;
					if(R>=365)R-=365,n++;
					if(R>=365)R-=365,n++;
				}
				else
				{
					if(R>=366)
					{
						R-=366,n++;
						if(R>=365)
						{
							R-=365,n++;
							if(R>=365)
							{
								R-=365,n++;
								if(R>=365)
									R-=365,n++;
							}
						}
					}
				}
				while(R)
				{
					if(n%4==0&&(n%100!=0||n%400==0))
					{
						r++;
						if(r>y2[y])r=1,y++;	
					}
					else
					{
						r++;
						if(r>y1[y])r=1,y++;	
					}
					if(y>12)y=1,r=1,n++;
					R--;	
				}
				printf("%d %d %d\n",r,y,n);
				
			}
		}
	}
	return 0;
}
2021/10/1 16:38
加载中...