50分 求大神帮助!!
查看原帖
50分 求大神帮助!!
510479
任珊911240楼主2021/10/21 19:55
#include<iostream>
#include<cstdio>
using namespace std;
long long Q,r;
int day1[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int day2[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int day3[13]={0,31,28,31,30,31,30,31,31,30,17,30,31};
int main(){
	//freopen("c.in","r",stdin);
	//freopen("c.out","w",stdout);
	cin>>Q;
	for(int i=1;i<=Q;i++){
		cin>>r;
	//	int rrr=r;
	//	cout<<r<<"   ";
		if(r<=1721423){//公元前 
		    int year=4713,y=366;
			while(r-y>=0){
				r-=y;
				year--;
				if(year%4==1) y=366;
				else y=365; 
			}
			if(year%4==1){
				int mon=1;
				while(r-day1[mon]>=0){
					r-=day1[mon];
					mon++;
				}
				cout<<r+1<<" "<<mon<<" "<<year<<" BC"<<endl;
			}
			else{
				int mon=1;
				while(r-day2[mon]>=0){
					r-=day2[mon];
					mon++;
				}
				cout<<r+1<<" "<<mon<<" "<<year<<" BC"<<endl;
			}
		}
		else if(r>1721423&&r<=2299160){//公元1年——1582年 10月4日 
			r-=1721423;r--;
			int year,y=365;
			year=r/1461*4;
			r=r%1461;
			while(r-y>=0){
				r-=y;
				year++;
				if(year%4==0) y=366;
				else y=365; 
			}
			year++;
			if(year%4==0){
				int mon=1;
				while(r-day1[mon]>=0){
					r-=day1[mon];
					mon++;
				}
				cout<<r+1<<" "<<mon<<" "<<year<<endl;
			}
			else{
				int mon=1;
				while(r-day2[mon]>=0){
					r-=day2[mon];
					mon++;
				}
				cout<<r+1<<" "<<mon<<" "<<year<<endl;
			}
		}
		else if(r>2299160){//<= 1582年 10月15日
			r-=2299161;
			int year=1582,y=78;
			while(r-y>=0){
				r-=y;
				year++;
				if((year%4==0&&year%100!=0)||year%400==0) y=366;
				else y=365; 
			}
			if(year==1582){
			   int mon=10;
			   while(r-day3[mon]>=0){
					r-=day3[mon];
					mon++;
				}
				if(mon==10){
					r+=14;
				}
				cout<<r+1<<" "<<mon<<" "<<year<<endl;	
			}
			else{
				if((year%4==0&&year%100!=0)||year%400==0){
					int mon=1;
					while(r-day1[mon]>=0){
						r-=day1[mon];
						mon++;
					}
					cout<<r+1<<" "<<mon<<" "<<year<<endl;
				}
				else{
					int mon=1;
					while(r-day2[mon]>=0){
						r-=day2[mon];
						mon++;
					}
					cout<<r+1<<" "<<mon<<" "<<year<<endl;
				}
			}
		}
	}
	return 0;	
}

输入1956644输出“1 1 645”(应为“31 12 644”)

2021/10/21 19:55
加载中...