人类将要移民火星了,不过在移民前,需要了解火星的日历,火星也是有闰年和闰月的,火星历中的月份设计与置闰规则是这样的:
一个火星年分为24个月,每6个月的最初5个月的长度为28火星日,其余为27火星日(也就是6月、12月、18月为27天)。而最后一个月(24月),如果是闰年就是28个火星日,平年则为27个火星日。这样一来,平年长度为:2028+274=668火星日,而闰年的长度为:21* 28+27*3=669火星日。
置闰规则
每十个火星年均由6个闰年及4个平年所组成,还遵循以下原则:
1.能被1000整除的年份是闰年,669天。如星元1000,2000年。
⒉.所有为奇数年份是闰年,669天。如星元1,3,5,7,33,123年。
3.能被10整除的年份但不能被100整除的年份是闰年,669天。如星元10,20,90,110,1230年。
4.只能被100整除的年份,以及其他偶数年份均为平年,668天。如星元2,4,6,8,12,98,100,102,198,200年。
输入火星的日期,比如:星元2021年10月27日,计算该日期是当年的距1月1日后第几天,以及距星元1年1月1日多天(注:不算起点这天,也就是星元1年1月2日距星元1年1月1日为1天)。
输入格式:
在一行中输入火星日期,为三个整数,分别是:年、月、日
输出格式:
在第一行输出该日期是当年火星年的距1月1日后第几天;在第二行输出距星元1年1月1日多少天。
输入样例:
在这里给出一组输入。例如:
2021 10 27
#include<iostream>
using namespace std;
int main()
{
int run_year = 0, ping_year = 0;
int year, month, day;
int put_out_1, put_out_2;
cin >> year >> month >> day;
for (int i = 1; i < year; i++)
{
if (i % 1000 == 0)
{
run_year++;
}
else if (i % 2 == 1)
{
run_year++;
}
else if (i % 10 == 0 && i % 100 != 0)
{
run_year++;
}
else
{
ping_year++;
}
}
int temp = month % 6;
int temp2 = month / 6;
month = month - 6 * temp2;
put_out_1= temp2 * 167 + 28 * (month - 1) + day-1;
put_out_2 = run_year * 669 + ping_year * 668 + temp2 * 167 + 28 * (month - 1) + day-1;
cout <<put_out_1<<endl<< put_out_2;
}