rt 5—10点都RE了
#include<bits/stdc++.h>
using namespace std;//2299172//146097
const unsigned long long a=146097;
unsigned long long month[130]={0,31,28,31,30,31,30,31,31,30,31,30,31};
void ask_day(unsigned long long data)
{
if(data<=2299172)
{
unsigned long long go_year=data/1461,go_day=data%1461;
if(go_day==0)
{
go_day+=1461;
go_year--;
}
go_year=4*go_year;
if(go_year<=4712)
{
if(go_day>60)go_day--;
else
{
if(go_day<=31)printf("%llu %llu %llu BC\n",go_day,1,4713-go_year);
else printf("%llu %llu %llu BC\n",go_day-31,2,4713-go_year);
return ;
}
go_year+=go_day/365;
go_day%=365;
if(go_day==0)
{
go_year--;
go_day+=365;
}
unsigned long long go_month=1,cnt=1;
while(go_day>month[cnt])
{
go_day-=month[cnt];
cnt++;
go_month++;
}
printf("%llu %llu %llu BC\n",go_day,go_month,4713-go_year);
return;
}
else
{
if(go_day>=60)go_day--;
else
{
if(go_day<=31)printf("%llu %llu %llu\n",go_day,1,go_year-4712);
else printf("%llu %llu %llu\n",go_day-31,2,go_year-4712);
return ;
}
go_year+=go_day/365;
go_day%=365;
if(go_day==0)
{
go_year--;
go_day+=365;
}
unsigned long long go_month=1,cnt=1;
while(go_day>month[cnt])
{
go_day-=month[cnt];
cnt++;
go_month++;
}
printf("%llu %llu %llu\n",go_day,go_month,go_year-4712);
return;
}
}
else
{
data-=2299172;
if(data<=77)
{
if(data<=16)printf("%llu %llu %llu\n",data+15,10,1582);
else if(data<=46)printf("%llu %llu %llu\n",data-16,11,1582);
else printf("%llu %llu %llu\n",data-46,12,1582);
return;
}
data-=77;
unsigned long long go_year=1583;
unsigned long long go_day=data+10;
go_year+=go_day/a*400;
go_day%=a;
if(go_day==0)
{
go_day+=a;
go_year-=400;
}
while(go_day>366)
{
if(go_year%400==0)go_day-=366;
else if(go_year%100==0)go_day-=365;
else if(go_year%4==0)go_day-=366;
else go_day-=365;
go_year++;
}
bool flag=false;
if(go_year%400==0)flag=true;
else if(go_year%100!=0&&go_year%4==0)flag=true;
if(flag)
{
if(go_day<=31)
{
printf("%llu %llu %llu\n",go_day,1,go_year);
return ;
}
else if(go_day<=60)
{
printf("%llu %llu %llu\n",go_day-31,2,go_year);
return;
}
go_day--;
}
unsigned long long go_month=1,cnt=1;
while(go_day>month[cnt])
{
go_day-=month[cnt];
cnt++;
go_month++;
}
printf("%llu %llu %llu\n",go_day,go_month,go_year);
return ;
}
}
int main()
{
//freopen("P7075_5.in","r",stdin);
//freopen("julian333.out","w",stdout);
int Q;
scanf("%d",&Q);
while(Q--)
{
unsigned long long data;
scanf("%llu",&data);
ask_day(data+1);
}
//if(!system("fc julian333.out P7075_5.out"))cout<<"!!!!!";
return 0;
}