样例全过,0分求调
查看原帖
样例全过,0分求调
492030
CityFish楼主2023/4/18 22:31
#include <iostream>
#include <string.h>
//c++ 11
using namespace std;

int q,ri;
string ans[10005];
int month[13]{0,1,0,1,0,1,0,1,1,0,1,0,1};

bool judge_rui(int year){
	if(year < 1582){
		if(year < 0){
			if((year*(-1) - 1) % 4 == 0){
				return true;
			}
			else return false;
		}
		else{
			if(year % 4 == 0){
				return true;
			}
			else return false;
		}
	}
	//当年份是 400 的倍数,或日期年份是 4 的倍数但不是 100 的倍数时,该年为闰年。 
	if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) return true;
	else return false;
}

string _exchange(int r){
	int y = -4713,m = 1,d = 1;
	//deal with year
	while(true){
		if(y == 1582 && r < 355) break;
		if(judge_rui(y) && r < 366){
			break;
		}
		else{
			if(r < 365) break;
		}
		if(y == 1582){
			r -= 355;
			y++;
		}
		else{
			if(judge_rui(y)){
				r -= 366;
				y++;
			}
			else{
				r -= 365;
				y++;
			}
		}
		if(y == 0) y++;
	}
	if(y == 0) y++;
	//deal with month
	while(true){
		if(judge_rui(y) && m == 2 && r < 29){
			break;
		}
		if(y == 1582){
			if(m == 10 && r < 21) break;
		}
		else{
			if(month[m] == 1 && r < 31) break;
			if(month[m] == 0 && r < 30) break;
		}
		if(m == 2){
			if(judge_rui(y)){
				r-=29;
				m++;
			}
			else{
				r-=28;
				m++;
			}
		}
		else{
			if(m == 10){
				if(y == 1582){
					r -= 21;
					m++;
				}
				else{
					r-=31;
					m++;
				}
			}
			else{
				if(month[m] == 1){
					r-=31;
					m++;
				}
				else{
					r-=30;
					m++;
				}
			}
		}
		if(m > 12){
			m = 1;
			y++;
			if(y == 0) y++;
		}
	}
	while(r > 0){
		d+=r;
		r=0;
		if(m == 10 && y == 1582){
			if(d <= 21) break;
			else{
				d -= 21;
				if(d == 0) d = 1;
				m++;
			}
		}
		else{
			if(month[m] == 1){
			if(d <= 31) break;
			else{
				d -= 31;
				if(d == 0) d = 1;
				m++;
			}
		}
		else{
			if(d <= 30) break;
			else{
				d -= 30;
				if(d == 0) d = 1;
				m++;
			}
		}
		}
		if(m > 12){
			y++;
			m = 1;
		}
	}
	string ans;
	if(y < 0){
		y *= -1;
		ans = to_string(d)+" "+to_string(m)+" "+to_string(y)+" BC";
	}
	else{
		ans = to_string(d)+" "+to_string(m)+" "+to_string(y);
	}
	return ans;
}

int main(){
	cin>>q;
	for(int i = 1;i <= q;i++){
		cin>>ri;
		ans[i] = _exchange(ri);
	}
	for(int i = 1;i <= q;i++){
		cout<<ans[i];
		if(i < q) cout<<endl;
	}
	return 0;
}
2023/4/18 22:31
加载中...