社区讨论

HELP

P7075[CSP-S 2020] 儒略日参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhke4laf
此快照首次捕获于
2025/11/04 17:52
4 个月前
此快照最后确认于
2025/11/04 17:52
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
long long q;
int mo[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
	cin >> q;
	while(q--){
		long long r;
		cin >> r;
		long long y=4713,m=1,nd=1;
		long long oy=365;
		while(r>oy){
			if(y==1582 && nd==2){
				y=1583,r-=355;
				continue;
			}
			if((y%4==0 && y%100!=0 || y%400==0) && y>1582 && nd==2 || y<=1582 && y%4==0 && nd==2){
				if(r>366){
					r-=366;
					y++;
				}else{
					cout << "12 31" << " " << y<< endl;
					break;
				}
			}else if(nd==1 && (y-1)%4==0){
				if(r>366){
					if(y==1){
						nd=2;
					}else{
						y--;	
					}
					r-=366;
				}else{
					cout << "12 31" << " " << y <<" BC" << endl;
					break;
				}
			}else{
				r-=365;
				if(nd==1){
					if(y==1){
						nd==2;
					}else{
						y--;
					}
				}else{
					y++;
				}
			}
		}
		if((y%4==0 && y%100!=0 || y%400==0) && nd==2 && y>1582 || nd==1 && (y-1)%4==0 || y<=1582 && nd==2 && y%4==0){
			mo[2]=29;
		}
		for(int i=1;mo[i]<=r;i++){
			r-=mo[i],m++;
		}
		if(nd==1){
			cout << r+1 << " " << m << " " << y << " BC" << endl;
		}else{
			cout << r+1 << " " << m << " " << y << endl;
		}
		mo[2]=28;
	}
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...