感觉上是没什么问题,但是会超时(好歹也能得个40分吧,当场全挂)
但是连题目给的样例2都过不去......也不知道为什么死活天数对不上,是我少算了多少天吗?似乎没有啊?死活看不出来究竟错在哪,求助大佬
代码如下:
//P7075 儒略日(洛谷民间数据)
#include<bits/stdc++.h>
using namespace std;
bool flag=false;
const int mon[13]={0, 31,28,31,30,31,30,31,31,30,31,30,31};
const int rmon[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
void run(int q);
int main()
{
int n;
n=read();
for(int i=1;i<=n;++i)
{
int q=read();
run(q);
}
return 0;
}
void run(int q)
{
++q;
int tot=-4713,cntm=1;
while(tot<=6295&&q>365)
{
//printf("tot:%d q:%d\n",tot,q);
if(tot==0){++tot;continue;}//不存在公元0年
if((tot<0&&(tot+1)%4==0) || (tot>0&&tot%4==0))q-=366;
else q-=365;
++tot;
}
if(tot>=1582)flag=true,q-=11;//删掉了11天
while(q>365)
{
if((tot%4==0&&tot%100!=0)||tot%400==0)q-=366;
else q-=365;
++tot;
}
while(q>28)
{
//printf("q:%d\n",q);
if(q<rmon[cntm])break;
if(flag==1 && (tot%4==0&&tot%100!=0)
|| (flag==0&&(tot+1)%4==0))
q-=rmon[cntm];
else q-=mon[cntm];
++cntm;
}
if(tot>0)cout<<q<<' '<<cntm<<' '<<tot<<endl;
else cout<<q<<' '<<cntm<<' '<<-tot<<" BC"<<endl;
}