冥间数据
查看原帖
冥间数据
218188
ParanoidMO楼主2020/11/7 23:24

咋就直接爆零了...(应该是代码问题,好几个网站测都报了,求指教)

#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;
}
2020/11/7 23:24
加载中...