谁能告诉我哪错了?
  • 板块学术版
  • 楼主Masna_Kimoyo
  • 当前回复4
  • 已保存回复4
  • 发布时间2020/11/8 21:31
  • 上次更新2023/11/5 08:25:29
查看原帖
谁能告诉我哪错了?
199459
Masna_Kimoyo楼主2020/11/8 21:31
#include<bits/stdc++.h>
using namespace std;
int d[15]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 
int T,year,month,day,r;
bool flag,f;
inline int read()
{
	int x=0;
	bool w=0;
	char c=getchar();
	while(!isdigit(c))
		w|=c=='-',c=getchar();
	while(isdigit(c))
		x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return w?-x:x;
}
inline int ksm(int a,int b)
{
	int ans=1;
	while(b)
	{
		if(b&1)
			ans*=a;
		a*=a;
		b>>=1;
	}
	return ans;
}
int main()
{
	freopen("julian.in","r",stdin);
	freopen("julian.out","w",stdout);
	T=read();
	while(T--)
	{
		year=4713,flag=0,f=0;
		r=read(),d[2]=28;
		while(year)
		{
//			cout<<year<<' '<<month<<' '<<1<<endl;
			if((year-1)%4==0)	d[2]++,f=1;
			for(register int i=1;i<=12;++i)
			{
//				if(r-d[i]>0)	cout<<rn<<endl;
				if(r-d[i]>0)
					r-=d[i];
				else	
				{
					printf("%d %d %d BC\n",1+r,i,year);
					flag=1;
					break;
				}
			}
			if(flag)	break;
			if(f)	d[2]--,f=0;
			year--;
		}//公元前的儒略历 
		if(flag)	continue;
		f=0;
		year=1;
		while(1)
		{
			if(year!=1582)
			{
				if(year%4==0)	d[2]++,f=1;
				for(register int i=1;i<=12;++i)
				{
					if(r-d[i]>0)
						r-=d[i];
					else
					{
						flag=1;
						printf("%d %d %d\n",1+r,i,year);
						break;
					}
				}
				if(flag)	break; 
				if(f)	d[2]--,f=0;
				year++; 
			}
			else
			{
				for(register int i=1;i<=9;++i)
				{
					if(r-d[i]>0)
						r-=d[i];
					else
					{
						flag=1;
						printf("%d %d 1582\n",r+1,i);
						break;
					}
				}
				if(r<4)	
				{
					flag=1;
					printf("%d 10 1582\n",r+1);
					break;
				}
				else	r-=4;
				break;
			}
		}//公元后的儒略历 
		if(flag)	continue;
		if(r<=17)	
		{
			printf("%d 10 1582\n",r+14);
			continue;
		}
		else	r-=17;
		if(r-d[11]<=0)		
		{
			printf("%d 11 1582\n",1+r);
			continue;
		}
		else	r-=d[11];
		if(r-d[12]<=0)
		{
			printf("%d 12 1582\n",1+r);
			continue;
		}
		else	r-=d[12];
		f=0,year=1583;
		while(1)
		{
			if(year%4==0)
			{
				if(year%100==0)
				{
					if(year%400==0)
						d[2]++,f=1;
				}
				else	d[2]++,f=1;		
			}
			for(register int i=1;i<=12;++i)
			{
				if(r-d[i]>0)
					r-=d[i];
				else
				{
					flag=1;
					printf("%d %d %d\n",1+r,i,year);
					break;
				}
			}
			if(flag)	break;
			if(f)	d[2]--,f=0;
			year++;
		}//公元后的格里高利历 
	}
	return 0;
} 
2020/11/8 21:31
加载中...