求助 UVA602
  • 板块学术版
  • 楼主__Octhyccc__
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/29 22:09
  • 上次更新2023/12/30 10:31:03
查看原帖
求助 UVA602
995753
__Octhyccc__楼主2023/12/29 22:09

UVA602.

#include<bits/stdc++.h>
using namespace std;
string China[7]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
string America[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
string M[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};
struct date{
	int year,month,day;
	string sdate,smonth;
};
date START,use;
int normal_days;
bool jud(int x){//判断闰年 
	if(x<=1752)return x%4==0;
	else{
		if(x%400==0)return 1;
		else if(x%100==0)return 0;
		else if(x%4==0)return 1;
		else return 0;
	}
}
bool invalid(date x){//判断日期是否存在 
	if(x.year<1)return 0;
	if(x.month>12 || x.month<1)return 0;
	if(x.day>31 || x.day<1)return 0;
	if(x.month==4||x.month==6||x.month==9||x.month==11){
		if(x.day>30)return 0;
	}
	if(x.month==2){
		if(jud(x.year)){
			if(x.day>29)return 0;
		}
		else {
			if(x.day>28)return 0;
		}
	}
	if(x.year==1752 && x.month==9 && x.day>=3 && x.day<=13)return 0;
	return 1;
}
void give(date &x,long long y,long long w){
	if(y>w)y-=11;
	int z=y%7;
	x.smonth=M[x.month-1];
	z==0?z=7:z;
	x.sdate=America[z-1];
	return ;
}
long long daycount(date x){//计算从 1/1/1 至输入一共的天数 
	long long ans;
	for(int i=1;i<x.year;i++){
		jud(i)?ans+=366:ans+=365;
	}
	for(int i=1;i<x.month;i++){
		if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)ans+=31;
		else if(i==4||i==6||i==9||i==11)ans+=30;
		else jud(x.year)?ans+=29:ans+=28;
	}
	ans+=x.day;
	return ans;
}
int main(){
	START.year=1752,START.month=9,START.day=2;
	normal_days=daycount(START);
	while(scanf("%d%d%d",&use.month,&use.day,&use.year) && (use.month||use.day||use.year)){
		if(!invalid(use)){
			printf("%d/%d/%d is an invalid date.\n",use.month,use.day,use.year);
			continue;
		}
		give(use,daycount(use),normal_days);
		cout<<use.smonth<<" "<<use.day<<", "<<use.year<<" is a "<<use.sdate<<"\n";
	}
	return 0;
}
//1/1/1 为 星期一. 
//改于 >1752. 
//1752.9.3~1752.9.13 are invalid.
//month,days,years;
2023/12/29 22:09
加载中...