本地能正确输出,但是交到洛谷上显示在某些行输出负数,不知道是什么原因?
#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;
}