求助
查看原帖
求助
852998
starfee楼主2022/10/27 15:15
#include<bits/stdc++.h>
using namespace std;

int q,ryears,rmouth,rday;
long long r[100010];
int mouth[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
	//freopen(julian.in,'r',stdin);
	//freopen(julian.out,'w',stdout);
	scanf("%d",&q);
	for(int i = 0;i < q;i++){
		scanf("%lld",&r[i]);
	}
	for(int i = 0;i < q;i++){
		ryears = -4713,rmouth = 1,rday = 1;
		if(r[i] > 2299160){
			ryears = 1582,rmouth = 10,rday = 15;
			r[i] -= 2299161;	
		}
		while(r[i] >= 366){
			if(ryears > 0){
				if(ryears > 1582){
					if(!(ryears % 4 == 0 && (ryears % 400 == 0 || ryears % 100 != 0))){
						ryears++;
						r[i] -= 365;
					}
					else{
						ryears++;
						r[i] -= 366;	
					}
				}
				else{
					if(!(ryears % 4 == 0)){
						ryears++;
						r[i] -= 365;
					}
					else{
						ryears++;
						r[i] -= 366;	
					}
				}
			}
			else{
				if(!(-ryears % 4 == 1)){
					ryears++;
					r[i] -= 365;
				}
				else{
					if(ryears != -1) ryears++;
					else ryears += 2;
					r[i] -= 366;	
				}
			}
		}
		if(r[i] == 365){
			if(ryears > 0){
				if(!(ryears % 4 == 0 && (ryears % 400 == 0 || ryears % 100 != 0))){
					cout << rday << " " << rmouth << " " << ryears + 1 << endl;
					continue;
				}
			}
			else if(!(-ryears % 4 == 1)){
				cout << rday << " " << rmouth << " " << -(ryears + 1) << " BC" << endl;
				continue;
			}
		}
		while(r[i] >= mouth[rmouth]){
			r[i] -= mouth[rmouth];
			if(rmouth == 2){
				if(ryears > 0){
					if((ryears % 4 == 0 && (ryears % 400 == 0 || ryears % 100 != 0))){
						r[i]--;
					}
				}
				else if((-ryears % 4 == 1)){
					r[i]--;
				}				
			}
			if(rmouth == 12) {
				rmouth = 0;
				ryears++;
			}
			rmouth++;
		}
		rday += r[i];
		if(rday > mouth[rmouth]){
			if(rmouth == 2){
				if((ryears % 4 == 0 && (ryears % 400 == 0 || ryears % 100 != 0))){
					if(rday == 29){
						rday += 31;
						rmouth--;
					}
				}
			}
			rday -= mouth[rmouth];
			rmouth++;
			if(rmouth >= 12){
				rmouth -=12;
				ryears++;
			}
		}
		if(ryears > 0){
			cout << rday << " " << rmouth << " " << ryears << endl;
		}
		else {
			cout << rday << " " << rmouth << " " << -(ryears) << " BC" << endl;
		}
	}
	return 0;
}

大佬求调

2022/10/27 15:15
加载中...