求救,1582年以后多了十三天? 样例第二个的后两个我的输出都比样例多了十三天。
#include<iostream>
#include<stdio.h>
#define ll long long
using namespace std;
ll n,m,a,b,c,d,T,year,month=0,day=0,tim;
ll pty[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
ll ry[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int main(){
cin>>T;
while(T--){
scanf("%d",&n);
n++;
if(n<=1721424){
tim=0;
year=4713;
month=1,day=0;
//年
a=n/1461;
n%=1461;
year-=a*4;
if(n>366){
year--,n-=366;
if(n>365)year--,n-=365;
if(n>365)year--,n-=365;
//普通月
for(int i=1;i<=11;i++){
if(n>pty[i]){
n-=pty[i];
month++;
}
}
day=n;
//此部分收工
}
else{
//闰月
for(int i=1;i<=11;i++){
if(n>ry[i]){
n-=ry[i];
month++;
}
}
day=n;
}
}
else if(n<=1721423+577737){
n-=1721424;
tim=1;
year=1;
month=1,day=0;
//年
a=n/1461;
n%=1461;
year+=a*4;
if(n>1095){
year+=3,n-=1095;
//闰月
for(int i=1;i<=11;i++){
if(n>ry[i]){
n-=ry[i];
month++;
}
else break;
}
day=n;
//此部分收工
}
else{
//普通月
if(n>365)year++,n-=365;
if(n>365)year++,n-=365;
for(int i=1;i<=11;i++){
if(n>pty[i]){
n-=pty[i];
month++;
}
else break;
}
day=n;
}
}
else{
n-=1721424;
n+=10;
tim=1;
year=1;
month=1,day=0;
//年
a=n/146097;
n%=146097;
year+=a*400;
if(n>109572){
year+=300;
n-=109572;
//第百润年
a=n/1461;
n%=1461;
year+=a*4;
if(n>1095){
year+=3,n-=1095;
//闰月
for(int i=1;i<=11;i++){
if(n>ry[i]){
n-=ry[i];
month++;
}
else break;
}
day=n;
//此部分收工
}
else{
//普通月
if(n>365)year++,n-=365;
if(n>365)year++,n-=365;
for(int i=1;i<=11;i++){
if(n>pty[i]){
n-=pty[i];
month++;
}
else break;
}
day=n;
}
}
else{
//第百不闰年
if(n>36524)year+=100,n-=36524;
if(n>36524)year+=100,n-=36524;
if(n>35064){
year+=96;
n-=35064;
if(n>365)year++,n-=365;
if(n>365)year++,n-=365;
if(n>365)year++,n-=365;
for(int i=1;i<=11;i++){
if(n>pty[i]){
n-=pty[i];
month++;
}
else break;
}
day=n;
}
else{
a=n/1461;
n%=1461;
year+=a*4;
if(n>1095){
year+=3,n-=1095;
//闰月
for(int i=1;i<=11;i++){
if(n>ry[i]){
n-=ry[i];
month++;
}
else break;
}
day=n;
//此部分收工
}
else{
//普通月
if(n>365)year++,n-=365;
if(n>365)year++,n-=365;
for(int i=1;i<=11;i++){
if(n>pty[i]){
n-=pty[i];
month++;
}
else break;
}
day=n;
}
}
}
}
printf("%lld %lld %lld ",day,month,year);
if(tim==0)printf("BC");
printf("\n");
}
return 0;
}