社区讨论
蒟蒻50pts求助
P7075[CSP-S 2020] 儒略日参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo7zie6t
- 此快照首次捕获于
- 2023/10/27 10:18 2 年前
- 此快照最后确认于
- 2023/10/27 10:18 2 年前
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll rl;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
inline bool rn(ll x){
return ((x%4==0&&x%100!=0)||x%400==0);
}
inline bool rlrn(ll x){
return (x%4==0);
}
inline void solve(){
cin>>rl;
ll year,mon=1,date=1;
if(rl<=1721423){
rl+=1;
year=4713;
// while(rl>=146100) year-=400,rl-=146100;
ll x=rl/146100;year-=(400*(x)),rl%=146100;
// while(rl>=1461) year-=4,rl-=1461;
x=rl/1461;year-=4*x,rl%=1461;
while(rl>365){
if(rlrn(year-1)){
if(rl>366) year-=1,rl-=366;
else break;
}
else year-=1,rl-=365;
}
for(register int i=1;i<=12;++i){
if(i==2&&rlrn(year-1)){
if(rl>29){
rl-=29,
++mon;
continue;
}
else break;
}
if(rl>month[i]){
rl-=month[i],
++mon;
continue;
}
else break;
}
date=rl;
cout<<date<<" "<<mon<<" "<<year<<" BC\n";
return;
}
if(rl<=2295160){
rl-=1721423,year=1;
// while(rl>=1461) year+=4,rl-=1461;
ll x=rl/1461;year+=4*x,rl%=1461;
while(rl>365){
if(rlrn(year)){
if(rl>366) year+=1,rl-=366;
else break;
}
else year+=1,rl-=365;
}
for(register int i=1;i<=12;++i){
if(i==2&&rlrn(year)){
if(rl>29){
rl-=29,
++mon;
continue;
}
else break;
}
if(rl>month[i]){
rl-=month[i],
++mon;
continue;
}
else break;
}
date=rl;
cout<<date<<" "<<mon<<" "<<year<<"\n";
return;
}
else{
rl-=2299161,date=15,mon=10,year=1582;
if(rl<=16){
cout<<rl+15<<" 10 "<<year<<"\n";
return;
}
if(rl<=16+month[11]){
cout<<rl-16<<" 11 "<<year<<"\n";
return;
}
if(rl<=16+month[11]+month[12]){
cout<<rl-16-30<<" 12 1582\n";
return;
}
rl-=77,++year,mon=1,date=1;
// while(rl>=146097) year+=400,rl-=146097;
ll x=rl/146097;year+=400*x;rl-=146097*x;
while(rl>365){
if(rn(year)){
if(rl>366) year+=1,rl-=366;
else break;
}
else year+=1,rl-=365;
}
for(register int i=1;i<=12;++i){
if(i==2&&rn(year)){
if(rl>29){
rl-=29,
++mon;
continue;
}
else break;
}
if(rl>month[i]){
rl-=month[i],
++mon;
continue;
}
else break;
}
date=rl;
cout<<date<<" "<<mon<<" "<<year<<"\n";
return;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int _;cin>>_;
while(_--) solve();
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...