蒟蒻求教
查看原帖
蒟蒻求教
1385606
Yun_Mo_s5_013楼主2025/6/27 09:55

本地能正确输出,但是交到洛谷上显示在某些行输出负数,不知道是什么原因?

#include<bits/stdc++.h>
using namespace std;
#define int long long

int Q;
int n;
int mth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
/*
使用儒略历的总天数:2299160
不记录的天数:10
儒略历起始年份:-4713
格里高利历起始年份:1582
公元前儒略历闰年数:1178
公元后儒略历闰年数:395
格里高利历起算至1583年天数:78
公元后1583之前按格里高利历计算的闰年数:383
公元前天数:1721423
儒略历4年天数:1461
格里高利年400年天数:146097
*/

signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	//freopen("P3273_2.in","r",stdin);
	cin>>Q;
	while(Q--){
		cin>>n;
		if(n<=2299160){//全用儒略历
			n++;
			int Y=0,y=0,m=0,d=0;
			Y=(n/1461)*4;//经过多少年
			d=n%1461;//还剩几天
			if(d>365){
				if(d/365>=1) d--;
				Y+=d/365;
				d%=365;
			}
			y=-4712+Y;
			if(y<=0) y--;
			for(int i=1;i<=12;i++){
				int tmp=mth[i];
				if(((y<0&&(-y)%4==1)||(y>0&&y%4==0))&&i==2) tmp++;
				if(d>tmp){d-=tmp;}
				else {m=i;break;}
			}
			if(m==1&&d==0) {y=(y==1?-1:y-1);m=12;d=31;}
			if(y<0){y=-y;cout<<d<<" "<<m<<" "<<y<<" BC\n";}
			else cout<<d<<" "<<m<<" "<<y<<"\n";
			continue;
		}else{
			n-=2299161;
			int y=0,m=0,d=0;
			if(n<=77){
				y=1582;
				if(n<=16){m=10;d=n+15;}
				else if(n>16&&n<=46){m=11;d=n-16;}
				else {m=12;d=n-46;}
				cout<<d<<" "<<m<<" "<<y<<'\n';
				continue;
			}
			n-=77;
			y=1583+(n/146097)*400;
			d=n%146097;
			while(d>=365){
				if((y%100&&y%4==0)||(y%400==0)){y++;d-=366;}
				else{y++;d-=365;}
			}
			for(int i=1;i<=12;i++){
				int tmp=mth[i];
				if(((y%100&&y%4==0)||(y%400==0))&&i==2) tmp++;
				if(d>tmp){d-=tmp;}
				else {m=i;break;}
			}
			if(m==1&&d==0) {y-=1;m=12;d=31;}
			cout<<d<<" "<<m<<" "<<y<<"\n";
			continue;
		}
	}
	return 0;
}

这是

2025/6/27 09:55
加载中...