自测无错,但是开freopen后out文件没有输出,提交到洛谷后RE, 0分
#include <bits/stdc++.h>
using namespace std;
struct T{
int y, m, d;
}nnooww;
int t;
long long r;
int dpm[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
bool isr(int y){
if(y % 400 == 0) return 1;
if(y%4 == 0 && y % 100 != 0) return 1;
return 0;
}
bool isr2(int y){
if(y < 0){
y = -y-1;
}
return y%4==0;
}
bool pri(T nw){
if(nw.y < 0) printf("%d %d %d BC\n", nw.d, nw.m, -nw.y);
else printf("%d %d %d\n", nw.d, nw.m, nw.y);
}
int main(){
freopen("julian1.in", "r", stdin);
freopen("julian.out", "w", stdout);
scanf("%d", &t);
while(t--){
nnooww = {-4713, 1, 1};
scanf("%lld", &r);
if(r <= 1721423){
while(r){
bool ifr = isr2(nnooww.y);
int yd = (ifr?366:365);
if(r >= yd){
r -= yd;
nnooww.y++;
if(r == 0) break;
continue;
}
int md = dpm[nnooww.m];
if(nnooww.m == 2 && ifr) md++;
if(r >= md){
r -= md;
nnooww.m++;
if(nnooww.m > 12){
nnooww.y++;
nnooww.m = 1;
}
if(r == 0) break;
continue;
}
nnooww.d++;
r--;
if(nnooww.d > md){
nnooww.d = 1;
nnooww.m++;
if(nnooww.m > 12){
nnooww.m = 1;
nnooww.y++;
}
}
}
pri(nnooww);
continue;
}else if(r == 1721424){
printf("1 1 1\n");
continue;
}
if(r <= 2305447){
r -= 1721424;
nnooww = {1, 1, 1};
while(nnooww.y != 1582 && r){
bool ifr = isr2(nnooww.y);
int yd = (ifr?366:365);
if(r >= yd){
r -= yd;
nnooww.y++;
if(r == 0) break;
continue;
}else break;
}
if(r == 0){
pri(nnooww);
continue;
}
if(nnooww.y != 1582){
while(r){
bool ifr = isr2(nnooww.y);
int md = dpm[nnooww.m];
if(nnooww.m == 2 && ifr) md++;
if(r >= md){
r -= md;
nnooww.m++;
if(nnooww.m > 12){
nnooww.y++;
nnooww.m = 1;
}
if(r == 0) break;
continue;
}
nnooww.d++;
r--;
if(nnooww.d > md){
nnooww.d = 1;
nnooww.m++;
if(nnooww.m > 12){
nnooww.m = 1;
nnooww.y++;
}
}
}
pri(nnooww);
continue;
}
while(nnooww.m != 10 && r){
bool ifr = isr2(nnooww.y);
int md = dpm[nnooww.m];
if(nnooww.m == 2 && ifr) md++;
if(r >= md){
r -= md;
nnooww.m++;
if(r == 0) break;
continue;
}else break;
}
if(r == 0){
pri(nnooww);
continue;
}
if(nnooww.m != 10){
while(r){
bool ifr = isr2(nnooww.y);
int md = dpm[nnooww.m];
if(nnooww.m == 2 && ifr) md++;
nnooww.d++;
r--;
if(nnooww.d > md){
nnooww.d = 1;
nnooww.m++;
if(nnooww.m > 12){
nnooww.m = 1;
nnooww.y++;
}
}
}
pri(nnooww);
continue;
}
while(nnooww.d != 4 && r){
bool ifr = isr2(nnooww.y);
int md = dpm[nnooww.m];
if(nnooww.m == 2 && ifr) md++;
nnooww.d++;
r--;
}
if(r == 0){
pri(nnooww);
continue;
}
r--;
nnooww = {1582, 10, 15};
if(r == 0){
pri(nnooww);
continue;
}
while(nnooww.y != 1599 && r){
bool ifr = isr2(nnooww.y);
int yd = (ifr?366:365);
if(r >= yd){
r -= yd;
nnooww.y++;
if(r == 0) break;
continue;
}else break;
}
if(r == 0){
pri(nnooww);
continue;
}
if(nnooww.y != 1600){
while(r){
bool ifr = isr(nnooww.y);
int md = dpm[nnooww.m];
if(nnooww.m == 2 && ifr) md++;
if(r >= md){
r -= md;
nnooww.m++;
if(nnooww.m > 12){
nnooww.y++;
nnooww.m = 1;
}
if(r == 0) break;
continue;
}
nnooww.d++;
r--;
if(nnooww.d > md){
nnooww.d = 1;
nnooww.m++;
if(nnooww.m > 12){
nnooww.m = 1;
nnooww.y++;
}
}
}
pri(nnooww);
continue;
}
while(nnooww.m != 12 && r){
bool ifr = isr(nnooww.y);
int md = dpm[nnooww.m];
if(nnooww.m == 2 && ifr) md++;
if(r >= md){
r -= md;
nnooww.m++;
if(r == 0) break;
continue;
}else break;
}
if(r == 0){
pri(nnooww);
continue;
}
if(nnooww.m != 12){
while(r){
bool ifr = isr(nnooww.y);
int md = dpm[nnooww.m];
if(nnooww.m == 2 && ifr) md++;
nnooww.d++;
r--;
if(nnooww.d > md){
nnooww.d = 1;
nnooww.m++;
if(nnooww.m > 12){
nnooww.m = 1;
nnooww.y++;
}
}
}
pri(nnooww);
continue;
}
while(nnooww.d != 31 && r){
bool ifr = isr(nnooww.y);
int md = dpm[nnooww.m];
if(nnooww.m == 2 && ifr) md++;
nnooww.d++;
r--;
}
if(r == 0){
pri(nnooww);
continue;
}
r--;
nnooww = {1600,1,1};
if(r == 0){
pri(nnooww);
continue;
}
while(r){
if(r >= 13068825){
r -= 13068825;
nnooww.y += 400;
if(r == 0) break;
}
bool ifr = isr2(nnooww.y);
int yd = (ifr?366:365);
if(r >= yd){
r -= yd;
nnooww.y++;
if(r == 0) break;
continue;
}
int md = dpm[nnooww.m];
if(nnooww.m == 2 && ifr) md++;
if(r >= md){
r -= md;
nnooww.m++;
if(nnooww.m > 12){
nnooww.y++;
nnooww.m = 1;
}
if(r == 0) break;
continue;
}
nnooww.d++;
r--;
if(nnooww.d > md){
nnooww.d = 1;
nnooww.m++;
if(nnooww.m > 12){
nnooww.m = 1;
nnooww.y++;
}
}
}
pri(nnooww);
continue;
}
r -= 2305448;
nnooww = {1600, 1, 1};
if(r == 0){
pri(nnooww);
continue;
}
int md = r%146097;
nnooww.y += (r/146097)*400;
r = md;
while(r){
bool ifr = isr(nnooww.y);
int yd = (ifr?366:365);
if(r >= yd){
r -= yd;
nnooww.y++;
if(r == 0) break;
continue;
}
int md = dpm[nnooww.m];
if(nnooww.m == 2 && ifr) md++;
if(r >= md){
r -= md;
nnooww.m++;
if(nnooww.m > 12){
nnooww.y++;
nnooww.m = 1;
}
if(r == 0) break;
continue;
}else{
nnooww.d += r;
while(nnooww.d > md){
nnooww.d -= md;
nnooww.m++;
if(nnooww.m > 12){
nnooww.m = 1;
nnooww.y++;
}
md = dpm[nnooww.m];
if(nnooww.m == 2 && ifr) md++;
}
break;
}
}
pri(nnooww);
}
return 0;
}