咋就直接爆零了...(应该是代码问题,好几个网站测都报了,求指教)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const long long bc = 1721424;
const long long rmove = bc+577737;
long long m0[15] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
long long m1[15] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
long long sum0[15], sum1[15];
int main()
{
for (long long i=1; i<=12; i++) sum0[i] = sum0[i-1]+m0[i];
for (long long i=1; i<=12; i++) sum1[i] = sum1[i-1]+m1[i];
ll q; scanf("%lld", &q);
while (q --)
{
ll d; scanf("%lld", &d);
if (d <= bc){
ll y, mth=1, day=1, r=0;
y = 4713 - d/1461*4;
if (d%1461 >= 0 && d % 1461 <= 366) r = 1, d%=1461;
else if (d%1461 > 366 && d % 1461 <= 731) y -= 1, d%=1461, d-=366;
else if (d%1461 > 731 && d % 1461 <= 1096) y -= 2, d%=1461, d-=731;
else if (d%1461 > 1096 && d % 1461 <= 1461) y -= 3, d%=1461, d-=1096;
if (r == 1)
{
for (long long i=1; i<=12; i++){
if (d > sum1[i-1] && d <= sum1[i]){
mth = i;
day = day+d-sum1[i-1];
break;
}
}
}
else
{
for (long long i=1; i<=12; i++){
if (d > sum0[i-1] && d <= sum0[i]){
mth = i;
day = day+d-sum0[i-1];
break;
}
}
}
printf("%lld %lld %lld BC\n", day, mth, y);
}
else if (d > bc && d <= rmove){
ll y=1, mth=1, day=1, r=0;
d -= bc;
y += d/1461*4;
if (d%1461 >= 0 && d % 1461 <= 365) d%=1461;
else if (d%1461 > 365 && d % 1461 <= 730) y += 1, d%=1461, d-=365;
else if (d%1461 > 730 && d % 1461 <= 1095) y += 2, d%=1461, d-=730;
else if (d%1461 > 1095 && d % 1461 <= 1461) y += 3, d%=1461, d-=1095, r=1;
if (r == 1)
{
for (long long i=1; i<=12; i++){
if (d > sum1[i-1] && d <= sum1[i]){
mth = i;
day = day+d-sum1[i-1];
break;
}
}
}
else
{
for (long long i=1; i<=12; i++){
if (d > sum0[i-1] && d <= sum0[i]){
mth = i;
day = day+d-sum0[i-1];
break;
}
}
}
printf("%lld %lld %lld \n", day, mth, y);
}
else{
ll y=1582, mth=10, day=15, r=0;
d -= rmove;
for (long long i=1; i<=d; i++) {
if ((y%4 == 0 && y % 100 != 0) || y%400 == 0){
if (day < m1[mth]) day ++;
else if (day >= m1[mth] && mth < 12) mth ++, day = 1;
else y ++, mth = 1, day = 1;
}
else {
if (day < m0[mth]) day ++;
else if (day >= m0[mth] && mth < 12) mth ++, day = 1;
else y ++, mth = 1, day = 1;
}
}
printf("%lld %lld %lld \n", day, mth, y);
}
}
return 0;
}