PTA ——火星日历

人类将要移民火星了,不过在移民前,需要了解火星的日历,火星也是有闰年和闰月的,火星历中的月份设计与置闰规则是这样的:
一个火星年分为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;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值