我又来求调.....(思路很简单,注释很详细)
查看原帖
我又来求调.....(思路很简单,注释很详细)
432183
JoeBiden2020楼主2021/10/6 09:31

多一天少一天的问题很严重,加上判断1584后闰年的机制,只剩10分了

#include <bits/stdc++.h>
using namespace std;
int q,r,y,m=1,d;
int monthdays2[13]= {0,31,29,31,30,31,30,31,31,30,31,30,31};
bool ifrun(int y) {
	return !((y-1)%4);
}
int main() {
	ios::sync_with_stdio(false);
	cin>>q;
	do {
		int tsp=0;
		monthdays2[2]=29;
		m=1;
		y=4713;
		cin>>r;
		int i=1;
		while(r>=366){ //先减年
			y--;
			if(y>=-1584){
				if(ifrun(y))r-=366;
				else r-=365;
			}
			else{
				if(abs(r)%100==0&&abs(r)%400!=0)r-=365;//百年不闰 
				else if(abs(r)%400==0)r-=366;//四百年又闰 
				else r-=365;
			}
		}
		while(monthdays2[i]<=r) { //当还可以减去整月
			r-=monthdays2[i];//减去
			i++;
			if(i>12) { //如果超过12月
				y--;
				if(!ifrun(y))monthdays2[2]=28; //更改2月
				else monthdays2[2]=29;
				i=1;//因为前面减年可能剩下365天,所以要判断加年 
			}
		}
		if(y<-1584)r+=11;//大于1584,无条件加11天 
		if(y==-1584) {//1584
			if(i>10)r+=11;
			if(i==10) {
				if(r>=4)r+=11;
			}
		}
		if(r>monthdays2[i]) {//如果爆月份 
			r-=monthdays2[i];
			i++;
		}
		if(y>0) {//BC 
			cout<<r+1<<" "<<i<<" "<<y<<" BC\n";
			continue;
		}
		if(y<0) {//AD
			y=-y+1;
		}
		cout<<r+1<<" "<<i<<" "<<y<<"\n";
	} while(--q);
}
2021/10/6 09:31
加载中...