在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。
题目描述在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。
牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月份,最后2位代表日期。显然:一个日期只有一种表示方法,而两个不同的日期的表 示方法不会相同。
牛牛认为,一个日期是回文的,当且仅当表示这个日期的8位数字是回文的。现 在,牛牛想知道:在他指定的两个日期之间包含这两个日期本身),有多少个真实存 在的日期是回文的。
一个8位数字是回文的,当且仅当对于所有的i
(1≤i≤8
)从左向右数的第i
个 数字和第9−i
个数字(即从右向左数的第i
个数字)是相同的。
例如:
对于2016年11月19日,用8位数字20161119表示,它不是回文的。
对于2010年1月2日,用8位数字20100102表示,它是回文的。
对于2010年10月2日,用8位数字20101002表示,它不是回文的。
每一年中都有12个月份:
其中,1,3,5,7,8,10,12月每个月有31天;4,6,9,11月每个月有30天;而对于2月,闰年时有29天,平年时有28天。
一个年份是闰年当且仅当它满足下列两种情况其中的一种:
这个年份是4的整数倍,但不是100的整数倍;
这个年份是400的整数倍。
例如:
以下几个年份都是闰年:2000,2012,2016。
以下几个年份是平年:1900,2011,2014。
输入描述
两行,每行包括一个8位数字。
第一行表示牛牛指定的起始日期date1
。
第二行表示牛牛指定的终止日期date2
。
题目数据保证:
date1
—定不晚于 date2
;
都是真实存在的日期;
年份部分一定为4位数字;
首位数字不为0;
输出描述
一个整数,表示在date1
和date2
之间,有多少个日期是回文的。
样例
输入 复制
20110101
20111231
输出 复制
1
输入 复制
20000101
20101231
输出 复制
2
我的代码如下:
#include<bits/stdc++.h>
using namespace std;
int days={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool hefa(int date)
{
int year=date/10000;
int mon=date/100%100;
int day=date%100;
if(mon==0||mon>12)
return false;
if(day==0||mon!=2&&day>days)
return false;
if(mon==2)
{
int leap=year%100!=0&&year%4==0||year%400==0;
if(day>28+leap)
{
return false;
}
}
}
int main()
{
int date1,date2;
cin>>date1;
cin>>date2;
int i,count=0,sum=0;
for(i=1000;i<10000;i++)
{
int date=i,x=i;
while(i)
{
sum=sum*10+i%10;
i=i/10;
}
if(date1<=date2&&date<=date2&&hefa(date))
{
count++;
}
}
cout<<count<<endl;
}
哪里不对啊请问 你的代码已经接近正确了,只需要在原有的基础上进行一些修改。
首先,在hefa函数中,你需要在最后加上return true;来表示日期是合法的。否则,如果日期符合条件,在函数末尾没有返回值,会导致编译错误。
其次,在主函数main中,你计算日期个数的循环条件应该是i <= date2 - date1 + 1,而不是i <= date2 - date1。这是因为题目要求包括起始和终止日期本身。另外,你还需要在循环中加上一个计数器count,每当检查到一个回文日期时,将count加1。最后输出count即可。
下面是修改后的完整代码:
#include<iostream>
using namespace std;
int days = {0,31,28,31,30,31,30,31,31,30,31,30,31};
bool hefa(int date)
{
int year = date / 10000;
int mon = date / 100 % 100;
int day = date % 100;
if(mon == 0 || mon > 12)
return false;
if(day == 0 || (mon != 2 && day > days))
return false;
if(mon == 2)
{
bool leap = (year % 100 != 0 && year % 4 == 0) || (year % 400 == 0);
if(day > 28 + leap)
return false;
}
return true;
}
int main()
{
int date1, date2;
cin >> date1;
cin >> date2;
int count = 0;
for(int i = date1; i <= date2; i++)
{
if(hefa(i))
count++;
}
cout << count << endl;
return 0;
}
希望能对你有所帮助!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]