本蒟蒻只写了公元前的,但是它连样例都不对
//
// main.cpp
// P7075 [CSP-S2020] 儒略日
//
// Created by Alan on 2021/10/5.
//
#include <bits/stdc++.h>
using namespace std;
#define register long long int
int _month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int __month[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
bool flag=false;
inline bool is_Gregorian_Year(int year)
{
if(year%400==0)
return true;
if(year%4==0)
if(year%100!=0)
return true;
return true;
}
inline bool is_Julian_Year(int year,bool BC)
{
if(BC) return (year-1)%4==0;
else return year%4==0;
}
inline int BCCheckYear(int & day)
{
int year=1;
for(int i=4713;;i--)
{
year=i;
if(is_Julian_Year(i, true))
{
day-=366;
if(day<0)
{
day+=366;
break;
}
}
else
{
day-=365;
if(day<0)
{
day+=365;
return year;
}
}
if(day==0)
{
cout<<"12 31 "<<year<<" BC"<<endl;
flag=true;
return 0;
}
}
return year;
}
inline int BCCheckMonth(int & day,int year)
{
int month=1;
for(int i=1;i<=12;i++)
{
month=i;
if(is_Julian_Year(year, true))
{
day-=_month[i];
if(day<0)
{
day+=_month[i];
break;
}
if(day==0)
{
cout<<_month[i]<<" "<<month<<" "<<year<<" BC"<<endl;
flag=true;
return 0;
}
else{;}
}
else
{
day-=__month[i];
if(day<0)
{
day+=__month[i];
break;
}
else{;}
if(day==0)
{
cout<<__month[i]<<" "<<month<<" "<<year<<" BC"<<endl;
flag=true;
return 0;
}
}
}
return month;
}
inline void BCPrint(int nowday)
{
int year=BCCheckYear(nowday);
if(flag) return;
int month=BCCheckMonth(nowday,year);
if(flag) return;
cout<<nowday<<" "<<month<<" "<<year<<" "<<"BC"<<endl;
return;
}
inline void JulianPrint(int day)
{
if(day<=1721424) BCPrint(day);
if(flag) return;
}
inline void GregorianPrint(int day)
{
;
}
inline void PrintAns(int day)
{
if(day<=1721424+577737)
JulianPrint(day);
if(flag) return;
else GregorianPrint(day);
}
signed main(int argc, const char * argv[]) {
// insert code here...
int n=0;int temp=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>temp;
PrintAns(temp+1);
flag=false;
}
return 0;
}
求DALAO指教