用C++写个计算天数的程序

题目:

日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。

小明习惯用88位数字表示一个日期,其中,前44位代表年份,接下来22位代表月份,最后22位代表日期。显然:一个日期只有一种表示方法,而两个不同的日期的表示方法不会相同。

小明认为,一个日期是回文的,当且仅当表示这个日期的88位数字是回文的。现在,小明想知道:在他指定的两个日期之间(包含这两个日期本身),有多少个真实存在的日期。

思路:

每一年中都有12个月份:

其中,11,33,55,77,88,1010,1212月每个月有3131天;44,66,99,1111月每个月有3030天;而对于22月,闰年时有2929天,平年时有2828天。

一个年份是闰年当且仅当它满足下列两种情况其中的一种:

1.这个年份是44的整数倍,但不是100100的整数倍;

2.这个年份是400400的整数倍。

例如:

·以下几个年份都是闰年:20002000 ,20122012 ,20162016

·以下几个年份是平年:19001900,20112011,2014

最后,上代码!!!

#include<bits/stdc++.h>
using namespace std;
bool check_date(int date) 
{

	int rs[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 
	int n=date/10000;
	int y=date%10000/100;
	int r=date%100;
if(y==0||y>12)
{
	return false;
}
if(r==0||y!=2&&r>rs[y])
{
	return false;	
}
if(y==2)
{
	int leap=n%100!=0&&n%4==0||n%400==0;
	if(r>28+leap)
	{
		return false; 
	} 
}
}
int main()
{
	int sum=0;
int date1,date2;
cin>>date1>>date2;
for(int i=date1;i<=date2;i++)
{
	if(check_date(i)) 
	{
	
			sum++;
	}
 } 
 cout<<sum;
}

运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值