P7075代码求助!
  • 板块题目总版
  • 楼主北京
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/11/15 15:32
  • 上次更新2023/11/5 08:00:19
查看原帖
P7075代码求助!
322285
北京楼主2020/11/15 15:32

感觉上是没什么问题,但是会超时(好歹也能得个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;
}
2020/11/15 15:32
加载中...