P7075儒略日
  • 板块灌水区
  • 楼主__Shao__
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/10/13 17:05
  • 上次更新2023/10/27 07:41:06
查看原帖
P7075儒略日
536191
__Shao__楼主2022/10/13 17:05

这道题调了挺久了。小一点的数字能对的,大样例对错都有,错的一般是多了一天。给代码注释了一下。

错误样例

1

543525290

正确答案为

7 8 1483409

我的答案:

8 8 1483409

前两个样例是能过的。所以我怀疑我的代码前一部分出了问题。即1582 年 10 月 4日以后有问题。

代码丑陋。

#include<bits/stdc++.h>
using namespace std;
#define rt register int 
int T,newy,newm,newd;
long long n;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int month2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int main(){
//	freopen("julian3.in","r",stdin);
//	freopen("julian3.out","w",stdout); 
	ios::sync_with_stdio(false);
	cin>>T;
	while(T--)
	{
		cin>>n;
		if(n==2299160)cout<<4<<" "<<10<<" "<<1582<<endl;//以此为时间点 ,一共有2299160天 
		else if(n>2299160){
			newy=1582,newm=10,newd=1;n+=13;//补上不存在的天数 
			n-=2299160;//扣掉初始化用掉的天数 
			while(1){//到第几年 
				if((newy%4==0&&newy%100!=0)||newy%400==0){//闰年判断 
					if(n>=366){
						++newy;n-=366;
					}else break;//如果不够减就退出年的计算 
				}else{
					if(n>=365){
						++newy;n-=365;
					}else break;
				}
			}
			while(1){//这里是决定到第几月份 
				if((newy%4==0&&newy%100!=0)||newy%400==0)
				{
					if(n>=month2[newm]){//month2对应闰年 
						n-=month2[newm];++newm;
						if(newm>12){++newy;newm=1;}//防止月份溢出 
					}else break;//进入日的计算 
				}else{
					if(n>=month[newm]){
						n-=month[newm];++newm;
						if(newm>12){++newy;newm=1;}
					}else break;
				}
			}
				if((newy%4==0&&newy%100!=0)||newy%400==0){//计算天数 
					newd+=n;
					if(newd>month2[newm]){
						newd-=month2[newm];
						++newm;
						if(newm>12){++newy;newm=1;}//防溢出 
					}
				}else{
					newd+=n;
					if(newd>month[newm]){
						newd-=month[newm];
						++newm;
						if(newm>12){++newy;newm=1;}
					}
				}
		}else{
			newy=-4713,newm=1,newd=1;
			while(1){
				if((newy<0&&(-newy-1)%4==0)||newy>0&&newy%4==0){
					if(n>=366){
						++newy;n-=366;
						if(newy==0)++newy;
					}else break;
				}else{
					if(n>=365){
						++newy;n-=365;
						if(newy==0)++newy;
					}else break;
				}
			}
			while(1){
				if((newy<0&&(-newy-1)%4==0)||newy>0&&newy%4==0)
				{
					if(n>=month2[newm]){
						n-=month2[newm];++newm;
						if(newm>12){++newy;newm=1;if(newy==0)++newy;}
					}else break;
				}else{
					if(n>=month[newm]){
						n-=month[newm];++newm;
						if(newm>12){++newy;newm=1;if(newy==0)++newy;}
					}else break;
				}
			}
				if((newy<0&&(-newy-1)%4==0)||newy>0&&newy%4==0){
					newd+=n;
					if(newd>month2[newm]){
						newd-=month2[newm];
						++newm;
						if(newm>12){++newy;newm=1;if(newy==0)++newy;}
					}
				}else{
					newd+=n;
					if(newd>month[newm]){
						newd-=month[newm];
						++newm;
						if(newm>12){++newy;newm=1;if(newy==0)++newy;}
					}
				}
		}
		if(newy>0)
			cout<<newd<<" "<<newm<<" "<<newy<<endl;
		else 
			cout<<newd<<" "<<newm<<" "<<-newy<<" "<<"BC"<<endl;
	}
}
2022/10/13 17:05
加载中...