我的答案有一月0日怎么解决。。
查看原帖
我的答案有一月0日怎么解决。。
141335
qwq2519楼主2020/11/9 09:55
#include<bits/stdc++.h>
#define rep(i,j,k) for(register int i(j);i<=k;++i)
using namespace std;
inline char gt()
{
	static char buf[1<<21],*p1=buf,*p2=buf;
	return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2) ? EOF:*p1++;
}
template <typename T>
inline void read(T &x)
{
	x=0;
	register char ch=gt();
	int w(0);
	while(!(ch>='0'&&ch<='9')) w|=ch=='-',ch=gt();
	while(ch>='0'&&ch<='9') x=x*10+(ch&15),ch=gt();
	w?x=~(x-1):x;
}
int T;
int yea,da,mon;
bool flag;
short int m[20]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
short int r[20]= {0,31,29,31,30,31,30,31,31,30,31,30,31};


inline void calcfuck(int x)//¼ÆËãɾ³ýÊ®ÌìºóµÄÈÕÆÚ
{
	while(1)//Ò»ÄêÀïÃæµÄ¼ÆËã; 1~1582 10֮ǰ
		{
			if( (yea%400==0) || ( (yea%4==0)&&(yea%100!=0) ) )	//²»ÊÇÈòÄê
				{
					if(x+da>r[mon])
						{
							while(x+da>r[mon])
								{
									x-=r[mon];
									mon++;
									if(mon==12)
										{
											if(x+da>31)
												{
													yea++;
													mon=1;
													x-=31;
													break;
												}
											else
												{
													da+=x;
													return ;
												}
										}

								}
						}
					else
						{
							da+=x;
							return ;
						}
				}
			else //ÈòÄê
				{
					if(x+da>r[mon])
						{
							while(x+da>m[mon])
								{
									x-=m[mon];
									mon++;
									if(mon==12)
										{
											if(x+da>31)
												{
													yea++;
													mon=1;
													x-=31;
													break;
												}
											else
												{
													da+=x;
													return ;
												}
										}
								}
						}
					else
						{
							da+=x;
							return ;
						}
				}
		}
}


inline void calc(int x)
{

			while(flag)
				{
					
					while(x>=365)
					{
						if(yea%4==1) x-=366;
						else x-=365;
						yea--;
						if(yea==0)
						{
							yea=1;
							flag=0;
							break;
						}
					}
					if(flag==0) break;
					if(yea%4!=1)	//²»ÊÇÈòÄê
						{
							if(x+da>m[mon])
								{
									while(x+da>m[mon])
										{
											x-=m[mon];
											mon++;
											if(mon==12)
												{
													if(x+da>31)
														{

															yea--;
															if(yea==0)
																{
																	yea=1;
																	flag=0;
																}
															mon=1;
															x-=31;
															break;
														}
													else
														{
															da+=x;
															return ;
														}
												}

										}
								}
							else
								{
									da+=x;
									return ;
								}
						}
					else if(yea%4==1)//ÈòÄê
						{
							if(x+da>r[mon])
								{
									while(x+da>r[mon])
										{
											x-=r[mon];
											mon++;
											if(mon==12)
												{
													if(x+da>31)
														{

															yea--;
															if(yea==0)
																{

																	yea=1;
																	flag=0;
																}
															mon=1;
															x-=31;
															break;
														}
													else
														{
															da+=x;
															return ;
														}
												}
										}
								}
							else
								{
									da+=x;
									return ;
								}
						}
				}
			if(flag) return ;



			while(1)//Ò»ÄêÀïÃæµÄ¼ÆËã; 1~1582 10֮ǰ
				{
					
					while(yea!=1582&&x>=365)
					{
						if((yea%4)) x-=365;
						else x-=366;
						yea++;
					}
					
					if(yea==1582)//ÈòÄê
						{
							if(x+da>r[mon])
								{
									for(; mon<10;)
										{
											if(x+da>r[mon]) x-=r[mon],mon++;
											else
												{
													da=+x;
													return;
												}
										}
									if(x+da<=4)
										{
											da+=x;
											return;
										}
									else
										{

											mon=10;
											yea=1582;

											x-=(4-da);
											da=15;
											if(x==0)
												{
													return ;
												}
											calcfuck(x);
											return;
										}
								}
						}

					if((yea%4))	//²»ÊÇÈòÄê
						{
									if(x+da>m[mon])
										{
											while(x+da>m[mon])
												{
													x-=m[mon];
													mon++;
													if(mon==12)
														{
															if(x+da>31)
																{

																	yea++;
																	mon=1;
																	x-=31;
																	break;
																}
															else
																{
																	da+=x;
																	return ;
																}
														}

												}
										}
									else
										{
											da+=x;
											return ;
										}
								
						}
					else //ÈòÄê
						{
								if(x+da>r[mon])
									{
										while(x+da>r[mon])
											{
												x-=r[mon];
												mon++;
												if(mon==12)
													{
														if(x+da>31)
															{
																yea++;
																mon=1;
																x-=31;
																break;
															}
														else
															{
																da+=x;
																return ;
															}
													}
											}
									}
								else
									{
										da+=x;
										return ;
									}
						}
				}
}



int main()
{
	
	freopen("1.in","r",stdin);
	freopen("2.out","w",stdout);
	int dated;
	read(T);
	while(T--)
		{
			read(dated);
			flag=1;
			yea=4713;
			da=1;
			mon=1;
			calc(dated);
			if(!flag) printf("%d %d %d\n",da,mon,yea);
			else 	printf("%d %d %d BC\n",da,mon,yea);
		}
	return 0;
}
2020/11/9 09:55
加载中...