求助!!!样例部分多一天
查看原帖
求助!!!样例部分多一天
753833
Mmatt楼主2022/9/2 21:02
#include<bits/stdc++.h>
using namespace std;
int n,q,y,m,d;
int month[]={31,28,31,30,31,30,31,31,30,31,30,31};
bool flag=0;
int run(int year ,int m){
	if(m!=2)return 0; 
    if(year<0){//bc qian
        year=-year-1;
        if(year%4==0||year==0)return 1;
		return 0;
		}
	else{
		if(year<1582){//0--1582
			if(year%4==0)return 1;
			return 0;
		}
		else{//1582 hou
			if((year%4==0&&year%100!=0)||year%400==0)return 1;
			return 0;
			}
		}

}
int main(){
	cin>>q;
	while(q--){
		cin>>n;
		y=-4713,d=1,m=1;
		if(n>=1721424){
			y=1,n-=1721424;
			}
		if(n>146097&&y>1582){//直接除加取模,跑得快~
			y=y+n/146097*400;
			n%=146097;
		}
		if(n>146100&&y+400<1582){//保证四百年后也在1582年前
			y+=400;
			n-=146100;
		}
		while(n>0){
			if(n>=365+run(y,2)){
				n=n-(365+run(y,2));
				y++;
				continue;
			}
			if(n>month[m]+run(y,m)){
				n=n-month[m]-run(y,m);
				m++;
				continue;
			}else{
				d+=n;
				n=0;
				break;
			}
		}
		if(y>1582)flag=1;
		if(y==1582&&m>10)flag=1;
		if(y==1582&&m==10&&d>4)flag=1;
		if(flag==1)d+=10;
		
		if(d>month[m]+run(y,m))d=d-month[m]-run(y,m),m++;
		if(m>12)m=1,y++;
		
		if(y>0)cout<<d<<" "<<m<<" "<<y<<endl;
		else cout<<d<<" "<<m<<" "<<-1*y<<" BC"<<endl;
		            
	}
	return 0;
}
2022/9/2 21:02
加载中...