来自一个蒟蒻的求助
谁能帮我看一下QAQ
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int m[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
ll Q, year, day, month;
ll r;
inline ll qr(){
ll x = 0;
char c = 0;
while (!isdigit(c))
c = getchar();
while (isdigit(c))
x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x;
}
inline void qw(ll x) {
if (x > 9)
qw(x / 10);
putchar(x % 10 + '0');
}
void count(ll r){
year = -4712, day = 1, month = 1;
if (r <= 2299160) {
ll k = r / 1461;
r %= 1461, year += k * 4;
while (r >= 365) {
if(year % 4 == 0) r--;
r -= 365, year++;
}
if(r == -1)
--year, month = 12, day = 31;
else {
while (r >= m[month]) {
r -= m[month], month++;
if(month == 2 && year & 3 == 0)
r--;
}
day += r;
}
}
else {
if (r > 2299160)
r += 10;
r -= 2298884, year = 1582;
if (r > 365 * 19 + 6)
r -= 365 * 19 + 5, year = 1601;
ll k = r / 146097;
r %= 146097, year += k * 400;
k = r / 36524;
r %= 36524, year += k * 100;
k = r / 1461;
r %= 1461, year += k * 4;
while (r >= 365) {
if (!(year & 3) && year % 100 || year % 400 == 0)
r--;
r -= 365, year++;
}
if (r == -1)
--year, month = 12, day = 31;
else {
while (r >= m[month]) {
r -= m[month], month++;
if (month == 2 && (year & 3 == 0 && year % 100 != 0 || year % 400 == 0))
r--;
}
day += r;
}
}
if (year <= 0)
qw(day), putchar(' '), qw(month), putchar(' '), qw(-year + 1),
putchar(' '), putchar('B'), putchar('C'), putchar('\n');
else
qw(day), putchar(' '), qw(month), putchar(' '), qw(year), putchar('\n');
return;
}
int main()
{
Q = qr();
while (Q--){
r = qr();
count(r);
}
return 0;
}