知道的越多,不知道的越多(微信:Y17744650906)
点赞再看,养成习惯
T156530 儒略历
![](https://i-blog.csdnimg.cn/blog_migrate/c4722c42e7ec8b4c38ff83e0e4e8deaa.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/0a3fa046f8295b1ad9a6017abf880413.png)
在 1582 年之前,以 4 为倍数的年份为闰年。正常情况下,一年中一月到十二月的天数分别是 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 天。如果这年是闰年,那么二月则有 29 天。
但某位皇帝发现这么做其实不够准确,会造成误差,因此规定从 1582 年开始,以 4 为倍数的年份,除了以 100 为倍数且不为 400 的倍数年份,才是闰年。同时为了消除误差,规定 1582 年 10 月 4 日的下一天是 1582 年 10 月 15 日,中间的日期就当作不存在了。
现在给出日期,计算这个日期到公元 1 年 1 月 1 日经过的天数。
输入格式:
按照 日月年 的格式输入数据,其中日是 1 到 31 之间的整数,月是三个大写字母,年是 1 到 9999 之间的整数。保证这个日期是合法且存在的。
月份的大写字母:
1月:JAN
2月:FEB
3月:MAR
4月:APR
5月:MAY
6月:JUN
7月:JUL
8月:AUG
9月:SEP
10月:OCT
11月:NOV
12月:DEC
输出格式:
按照输入的顺序输出中奖名单,每个昵称占一行。如果没有人中奖,则输出 Keep going…。
#include<iostream>
#include<stdio.h>
#include<cctype>
#include<string.h>
using namespace std;
int main(){
string in,mon;
string mons[13]={"lin","JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"};
cin>>in;
int day=0,year=0,i,j;
int is1 = 1,is2 = 0;
for(i=0;i<in.length();i++){
if(isdigit(in[i]) && is1){
day = day * 10 + (in[i] - '0');
}else{
is1 = 0;
is2 = 1;
}
if(isalpha(in[i])){
mon += in[i];
}
if(is2 && isdigit(in[i])){
year = year * 10 + (in[i] - '0');
}
}
int mou = 0;
for(i=1;i<13;i++){
if(mons[i] == mon){
mou = i;
break;
}
}
int ans = 0,is2y;
if(year < 1582){
for(i=1;i<year;i++){
if(i % 4 == 0){
ans += 366;
}else{
ans += 365;
}
}
if(year % 4 == 0 && mou >= 2){
is2y = 29;
}
else{
is2y = 28;
}
for(i=1;i<mou;i++){
if(i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12){
ans += 31;
}
else if(i == 2){
ans += is2y;
}else{
ans += 30;
}
}
ans += day;
}
else if(year == 1582){
for(i=1;i<year;i++){
if(i % 4 == 0){
ans += 366;
}else{
ans += 365;
}
}
if(mou < 10){
for(i=1;i<mou;i++){
if(i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12){
ans += 31;
}
else if(i == 2){
ans += 28;
}else{
ans += 30;
}
}
ans += day;
}else if(mou == 10){
for(i=1;i<mou;i++){
if(i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12){
ans += 31;
}
else if(i == 2){
ans += 28;
}else{
ans += 30;
}
}
if(day <= 4){
ans += day;
}else{
ans += (day -10);
}
}else{
for(i=1;i<mou;i++){
if(i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12){
ans += 31;
}
else if(i == 2){
ans += 28;
}else{
ans += 30;
}
}
ans += day - 10;
}
}else{
for(i=1;i<=1582;i++){
if(i % 4 == 0){
ans += 366;
}else{
ans += 365;
}
}
ans -= 10;
for(i=1583;i<year;i++){
if((i%4== 0 && i%100!=0 )|| i%400==0){
ans += 366;
}else{
ans += 365;
}
}
if(((i%4== 0 && i%100!=0 )|| i%400==0) && mou >= 2){
is2y = 29;
}
else{
is2y = 28;
}
for(i=1;i<mou;i++){
if(i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12){
ans += 31;
}
else if(i == 2){
ans += is2y;
}else{
ans += 30;
}
}
ans += day;
}
cout<<ans-1;
return 0;
}