为啥只有,输出找不到区别10pts 求调
查看原帖
为啥只有,输出找不到区别10pts 求调
1422328
TaoHongXi楼主2024/10/25 16:06
#include <bits/stdc++.h>
using namespace std;

const int BC = 4713*365+4712/4, AC = BC+1581*365+1580/4+278, FY = 365*4+1,CY=FY*25,TY=FY*250;
const int MY=FY*2500;
int q, r;
int n1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int n2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};

int main(){
	scanf("%d",&q);
	//freopen("julian.ans","w",stdout);
	while(q--){
		scanf("%d",&r);
		if(r<=BC){
			int y=4713, m=1, d=1;
			while(r-FY>0){
				y-=4;
				r-=FY;
			}
			while(r-365>0){
				if(y%4==1&&r-366>0){
					r-=366;
					y-=1;
				}
				else if(y%4==1&&r-366<=0){
					break;
				}
				else{
					r-=365;
					y-=1;
				}
			}
			if(y%4==1){
				while(r-n2[m]>0){
					r-=n2[m];
					m++;
				}
				d+=r;
				if(d>n2[m])d-=n2[m],m++;
				if(m>12) m-=12,y++;
				printf("%d %d %d BC\n",d,m,y);
			}
			else{
				while(r-n1[m]>0){
					r-=n1[m];
					m++;
				}
				d+=r;
				if(d>n1[m])d-=n1[m],m++;
				if(m>12)m-=12,y++;
				printf("%d %d %d BC\n",d,m,y);
			}
			
		}
		else if(r<AC){
			r-=BC;
			int y=1, m=1, d=0;
			while(r-MY>0){
				y+=10000;
				r-=MY;
			}
			while(r-TY>0){
				y+=1000;
				r-=TY;
			}
			while(r-CY>0){
				y+=100;
				r-=CY;
			}
			while(r-FY>0){
				y+=4;
				r-=FY;
			}
			while(r-365>0){
				if(y%4==0&&r-366>0){
					r-=366;
					y+=1;
				}
				else if(y%4==0&&r-366<=0){
					break;
				}
				else{
					r-=365;
					y+=1;
				}
			}
			if(y%4==0){
				while(r-n2[m]>0){
					r-=n2[m];
					m++;
				}
				
				d+=r;
				if(d>n2[m])d-=n2[m],m++;
				printf("%d %d %d\n",d,m,y);
			}
			else{
				while(r-n1[m]>0){
					r-=n1[m];
					m++;
				}
				d+=r;
				if(d>n1[m])d-=n1[m],m++;
				printf("%d %d %d\n",d,m,y);
			}
			
		}
		else{
			r-=AC;
			if(r-16>0)r-=16;
			else{
				printf("%d %d %d\n",r+15,10,1582);
				continue;
			}
			if(r-30>0)r-=30;
			else{
				printf("%d %d %d\n",r,11,1582);
				continue;
			}
			if(r-31>0) r-=31;
			else{
				printf("%d %d %d\n",r,12,1582);
				continue;
			}
			int y=1583, m=1, d=0;
			while(r-MY+100-25>0){
				y+=10000;
				r-=MY-100+25;
			}
			while(r-TY+10-(y+1000)/400+y/400>0){
				y+=1000;
				r-=TY-10-(y-1000)/400+y/400;
			}
			while(r-CY+1-(y+100)/400+y/400>0){
				y+=100;
				r-=CY-1+y/400-(y-100)/400;
				//printf("%d %d\n",r,y);
			}
			while(r-FY>0){
				if(y/100==(y+4)/100||y/400!=(y+4)/400){
					r-=FY;
					y+=4;
				}
				else{
					r-=FY-1;
					y+=4;
				}
			}
			while(r-365>0){
				if(y%400==0||(y%100!=0&&y%4==0)&&r-366>0){
					r-=366;
					y++;
				}
				else if(y%400==0||(y%100!=0&&y%4==0)&&r-366<=0){
					break;
				}
				else{
					r-=365;
					y++;
				}
			}
			if((y%4==0&&y%100!=0)||y%400==0){
				while(r+d-n2[m]>0){
					r-=n2[m];
					m++;
				}
				d+=r;
				
				printf("%d %d %d\n",d,m,y);
			}
			else{
				while(r+d-n1[m]>0){
					r-=n1[m];
					m++;
				}
				d+=r;
				printf("%d %d %d\n",d,m,y);
			}
		}
	}
	return 0;
}
2024/10/25 16:06
加载中...