40分求助
查看原帖
40分求助
114530
隐隐约约妖艳楼主2020/11/10 20:38

我自己测试的结果是在1582年之后的有的日期多了一天,但有的又没有,不知道哪里错了

#include<bits/stdc++.h>
using namespace std;
long long q,r,d,m,y;
bool fla;//是否为闰年
void jc()//知道天数算日期月份
{
	if(fla)
	{
		if(r<=213)
		{
			if(r<=31) m=1;
			else if(r<=60) m=2,r-=31;
			else
			{
				r-=60;
				m=3;
				m+=((r-1)/61)*2;
				r%=61;
				if(!r) r=61;
				if(r>31) m++,r-=31;
			}
		}
		else
		{
			r-=213;
			m=8+((r-1)/61)*2;
			r%=61;
			if(!r) r=61;
			if(r>31) m++,r-=31;
		}
	}
	else
	{
		if(r<=212)
		{
			if(r<=31) m=1;
			else if(r<=59) m=2,r-=31;
			else
			{
				r-=59;
				m=3;
				m+=((r-1)/61)*2;
				r%=61;
				if(!r) r=61;
				if(r>31) m++,r-=31;
			}
		}
		else
		{
			r-=212;
			m=8+((r-1)/61)*2;
			r%=61;
			if(!r) r=61;
			if(r>31) m++,r-=31;
		}
	}

}
int main()
{
scanf("%lld",&q);
while(q--)
{
scanf("%lld",&r);
r++;

if(r<=1721424)//公元前
{
	fla=1;
	y=((r-1)/1461)*4;
	r%=1461;
	if(!r) r=1461;
	if(r>366)
	{
		r-=366,y++,fla=0;
		while(r>365) r-=365,y++;
	}
	jc();
	printf("%lld %lld %lld BC\n",r,m,4713-y);
}
else//公元后
{
	r-=1721424;
	if(r>577737) r+=10;//那十天
	y=1;
	if(r<=578556)//1584前
	{
		y+=((r-1)/1461)*4;
		r%=1461;
		if(!r) r=1461;
		if(r>365) r-=365,y++;
		if(r>365) r-=365,y++;
		if(r>365) r-=365,y++;
		if(y%4==0) fla=1;
		else fla=0;
		jc();
	}
	else
	{
		r-=578556;
		y=1585;
		y+=((r-1)/146097)*400;
		r%=146097;
		if(!r) r=146097;
		y+=((r-1)/36524)*100;
		r%=36524;
		if(!r) r=36524;
		y+=((r-1)/1461)*4;
		r%=1461;
		if(!r) r=1461;
		if(r>365) r-=365,y++;
		if(r>365) r-=365,y++;
		if(r>365) r-=365,y++;
		if(y%400==0||(y%4==0&&y%100!=0))fla=1;
		else fla=0;
		jc();
	}
	printf("%lld %lld %lld\n",r,m,y);
}



}

return 0;
}
2020/11/10 20:38
加载中...