优美的儒略日代码70分可以欣赏一下
查看原帖
优美的儒略日代码70分可以欣赏一下
211960
nzynzy楼主2021/10/14 16:13
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
//闰年:%4...1
//1.预处理出月份表,减去时间
//2.预处理出公元1年1月1日时间,从这个地方开始算 
using namespace std;
int month[15]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 
long long n;
int T;
int main(){
	cin>>T;
	while(T--){
	cin>>n;
	bool flag=false;
	if(n<=1721423){
		n+=1;
		for(int i=4713;i>=1;i--){
		int year,mon,day;
		if(i%4==1)year=366;
		else year=365;
		if(n>year)n-=year;
		else if(n==year){
			printf("31 12 %d BC\n",i);
			flag=true;
		}else{//n<year
			if(i%4==1)month[2]=29;
			else month[2]=28;
			for(int j=1;j<=12;j++){
				if(n>month[j])n-=month[j];
				else if(n==month[j]){
					printf("%d %d %d BC\n",month[j],j,i);
					flag=true;
				}else{
					printf("%d %d %d BC\n",n,j,i);
					flag=true;
				}
				if(flag)break;
			}
		}
		if(flag)break;
	}
	}else if(n<2299161){
		n-=1721423;
		for(int i=1;i<=1582;i++){
			int year,day,mon;
			if(i%4==0)year=366;
			else year=365;
			if(n>year)n-=year;
			else if(n==year){
				printf("31 12 %d\n",i);
				flag=true;
			}else{
				if(i%4==0)month[2]=29;
				else month[2]=28;
				for(int j=1;j<=12;j++){
					if(n>month[j]){
					n-=month[j];
				}else if(n==month[j]){
					printf("%d %d %d\n",month[j],j,i);
					flag=true;
				}else{
					printf("%d %d %d\n",n,j,i);
					flag=true;
					}
					if(flag)break;
				}
			}
			if(flag)break;
		}
	}else if(n>=2299161&&n<=2299238){
//2299238是1582年12月31日
//2299161是1582年10月15日 
//2299160是1582年10月4日 
		n-=2299161;
		if(n<=16){
			printf("%d 10 1582\n",n+15);
			continue;
		}else if(n>16&&n<=30+16){
			printf("%d 11 1582\n",n-16);
			continue;
		}else if(n>46&&n<=46+31){
			printf("%d 12 1582\n",n-46);
			continue;
		}
	}else if(n<=40000300){
		n-=2299238;
		for(int i=1583;i<=104809;i++){
			int year,day,mon;
			if(i%400==0||(i%4==0&&i%100!=0))year=366;
			else year=365;
			if(n>year)n-=year;
			else if(n==year){
				printf("31 12 %d\n",i);
				flag=true;
			}else{
			if(i%400==0||(i%4==0&&i%100!=0))month[2]=29;
			else month[2]=28;
			for(int j=1;j<=12;j++){
				if(n>month[j]){
					n-=month[j];
				}else if(n==month[j]){
					printf("%d %d %d\n",month[j],j,i);
					flag=true;
				}else{
					printf("%d %d %d\n",n,j,i);
					flag=true;
					}
					if(flag)break;
				}
			}
			if(flag)break;
			}
		}else if(n<100000147){
			n-=40000300;
			for(int i=104805;i<=300000;i++){
			int year,day,mon;
			if(i%400==0||(i%4==0&&i%100!=0))year=366;
			else year=365;
			if(n>year)n-=year;
			else if(n==year){
				printf("31 12 %d\n",i);
				flag=true;
			}else{
			if(i%400==0||(i%4==0&&i%100!=0))month[2]=29;
			else month[2]=28;
			for(int j=1;j<=12;j++){
				if(n>month[j]){
					n-=month[j];
				}else if(n==month[j]){
					printf("%d %d %d\n",month[j],j,i);
					flag=true;
				}else{
					printf("%d %d %d\n",n,j,i);
					flag=true;
					}
					if(flag)break;
				}
			}
			if(flag)break;
			}
		}else if(n<=599999962){
			n-=100000147;
			n++;
			for(int i=269079;i<=1638032;i++){
			int year,day,mon;
			if(i%400==0||(i%4==0&&i%100!=0))year=366;
			else year=365;
			if(n>year)n-=year;
			else if(n==year){
				printf("31 12 %d\n",i);
				flag=true;
			}else{
			if(i%400==0||(i%4==0&&i%100!=0))month[2]=29;
			else month[2]=28;
			for(int j=1;j<=12;j++){
				if(n>month[j]){
					n-=month[j];
				}else if(n==month[j]){
					printf("%d %d %d\n",month[j],j,i);
					flag=true;
				}else{
					printf("%d %d %d\n",n,j,i);
					flag=true;
					}
					if(flag)break;
				}
			}
			if(flag)break;
			}
		}else{
			n-=599999963;
			n++;
			for(int i=1638032;i<=2739720;i++){
			int year,day,mon;
			if(i%400==0||(i%4==0&&i%100!=0))year=366;
			else year=365;
			if(n>year)n-=year;
			else if(n==year){
				printf("31 12 %d\n",i);
				flag=true;
			}else{
			if(i%400==0||(i%4==0&&i%100!=0))month[2]=29;
			else month[2]=28;
			for(int j=1;j<=12;j++){
				if(n>month[j]){
					n-=month[j];
				}else if(n==month[j]){
					printf("%d %d %d\n",month[j],j,i);
					flag=true;
				}else{
					printf("%d %d %d\n",n,j,i);
					flag=true;
					}
					if(flag)break;
				}
			}
			if(flag)break;
			}
		}
	}
	return 0;
}
2021/10/14 16:13
加载中...