神奇的一点:同一个程序,4种分数
#include<cstdio>
const int y1[14]={0,31,28,31,30,31,30,31,31,30,31,30,31},y2[14]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int Q;
int R;
int n,y,r;
int read()
{
int x=0;
char ch;
for(;ch<'0'||ch>'9';ch=getchar());
for(;ch>='0'&&ch<='9';x=x*10+ch-'0',ch=getchar());
return x;
}
int main()
{
// freopen("7075.in","r",stdin);
// freopen("7075.out","w",stdout);
for(scanf("%d",&Q);Q;--Q)
{
n=0,y=0,r=0;
R=read();
if(R<2299161)
{
if(R<1721424)
{
n=-4713,y=1,r=1;
n+=(R/1461)*4;
R%=1461;
if(R>=366)
{
R-=366,n++;
if(R>=365)R-=365,n++;
if(R>=365)R-=365,n++;
if(R>=365)R-=365,n++;
}
while(R)
{
if((n+1)%4==0)
{
r++;
if(r>y2[y])
y++,r=1;
}
else
{
r++;
if(r>y1[y])
y++,r=1;
}
if(y>12){n++,r=1,y=1;}
R--;
}
printf("%d %d %d BC\n",r,y,-n);
}
else
{
R-=1721424;
n=1,y=1,r=1;
n+=(R/1461)*4;
R%=1461;
if(R>=365)
{
R-=365,n++;
if(R>=365)
{
R-=365,n++;
if(R>=365)
{
R-=365,n++;
if(R>=366)R-=366,n++;
}
}
}
while(R)
{
if((n)%4==0)
{
r++;
if(r>y2[y])
y++,r=1;
}
else
{
r++;
if(r>y1[y])
y++,r=1;
}
if(y>12){n++,r=1,y=1;}
R--;
}
printf("%d %d %d\n",r,y,n);
}
}
else
{
R-=2299161;
//from 1582.10.15
/*
Here
We should begin from 1600
So we must cl 1582.10.15~1599.12.31
*/
if(R<6287)
{
if(R<78)
{
n=1582,y=10,r=15;
while(R)
{
r++;
if(r>y1[y])y++,r=1;
R--;
}
printf("%d %d %d\n",r,y,n);
}
else
{
R-=78;
n=1583,y=1,r=1;
n+=(R/1461)*4;
R%=1461;
if(R>=365)
{
R-=365;
n++;
if(R>=366)
{
R-=366;
n++;
if(R>=365)
{
R-=365;
n++;
if(R>=365)
{
R-=365;
n++;
}
}
}
}
while(R)
{
if(n%4==0)
{
r++;
if(r>y2[y])r=1,y++;
}
else
{
r++;
if(r>y1[y])r=1,y++;
}
R--;
}
printf("%d %d %d\n",r,y,n);
}
}
else
{
int pd=0;
R-=6287;
int n=1600,y=1,r=1;
n+=(R/146097)*400;
R%=146097;
if(R>=36525){
R-=36525;
n+=100;
pd++;
if(R>=36524)
{
R-=36524;
n+=100;
pd++;
if(R>=36524)
{
R-=36524;
n+=100;
pd++;
if(R>=36524)
{
R-=36524;
n+=100;
pd++;
}
}
}
}
if(n%100==0&&n%400!=0)
{
if(R>=1460)
R-=1460,n+=4;
}
n+=(R/1461)*4;
R%=1461;
if(n%100==0&&n%400!=0)
{
if(R>=365)R-=365,n++;
if(R>=365)R-=365,n++;
if(R>=365)R-=365,n++;
if(R>=365)R-=365,n++;
}
else
{
if(R>=366)
{
R-=366,n++;
if(R>=365)
{
R-=365,n++;
if(R>=365)
{
R-=365,n++;
if(R>=365)
R-=365,n++;
}
}
}
}
while(R)
{
if(n%4==0&&(n%100!=0||n%400==0))
{
r++;
if(r>y2[y])r=1,y++;
}
else
{
r++;
if(r>y1[y])r=1,y++;
}
if(y>12)y=1,r=1,n++;
R--;
}
printf("%d %d %d\n",r,y,n);
}
}
}
return 0;
}