大佬看看我这40pts代码还有救吗? (如果要算法告诉我一声然后就不用管了,因为我不会算法)
#include<bits/stdc++.h>
using namespace std;
struct date
{
int day;
int m;
int y;
};
bool run(int year)
{
if(year < 0)
{
if((abs(year) - 1) % 4 == 0)
{
return true;
}
else
{
return false;
}
}
else if(year > 0 && year <= 1582)
{
if(year % 4 == 0)
{
return true;
}
else
{
return false;
}
}
else if(year > 1582)
{
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
return true;
}
else
{
return false;
}
}
}
int tian(int &a, int &ye)
{
if(a == 1 || a == 3 || a == 5 || a == 7 || a == 8 || a == 10 || a == 12)
return 31;
else if(a == 4 || a == 6 || a == 9 || a == 11)
{
return 30;
}
else if(a == 2)
{
if(run(ye))
{
return 29;
}
else if(!run(ye))
{
return 28;
}
}
}
int main()
{
int q;
cin >> q;
int r[100001];
for(int i = 1;i <= q;i++)
{
cin >> r[i];
}
for(int i = 1;i <= q;i++)
{
date d;
d.day = 1;
d.m = 1;
d.y = -4713;
for(int j = 1;;j++)
{
if(d.y == 1582 && d.m == 10)
{
if(r[i] <= 3)
{
d.day += r[i];
cout << d.day << " " << d.m << " " << d.y << endl;
break;
}
else if(r[i] < 20)
{
d.day += (r[i] + 10);
cout << d.day << " " << d.m << " " << d.y << endl;
break;
}
else if(r[i] >= 20)
{
r[i] -= 21;
d.m++;
d.day = 1;
}
}
else if(r[i] < tian(d.m, d.y))
{
d.day += r[i];
if(d.y < 0)
{
cout << d.day << " " << d.m << " " << abs(d.y) << " " << "BC" << endl;
break;
}
else if(d.y > 0)
{
cout << d.day << " " << d.m << " " << d.y << endl;
break;
}
}
else if(r[i] >= tian(d.m, d.y))
{
if(d.m != 12)
{
r[i] -= tian(d.m, d.y);
d.m++;
d.day = 1;
}
else if(d.m == 12)
{
r[i] -= tian(d.m, d.y);
d.m = 1;
d.day = 1;
if(d.y == -1)
{
d.y = 1;
}
else
{
d.y++;
}
}
}
}
}
return 0;
}