//日期代码(day_diff)
#include <iostream>
using namespace std;
const int N =1e6+10;
int n;
int yy,mm,dd,yyy,mmm,ddd; //开始--结束
//平年
int a[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//闰年
int b[]={0,31,29,31,30,31,30,31,31,30,31,30,31};
//闰年 平年判定
bool chance(int yyyy){
if((yyyy%4==0 && yyyy%100!=0)||(yyyy%400==0)) return true;
return false;
}
//闰年返回天数 平年返回天数
int year_back(int y){
if(chance(y)) return 366;
else
return 365;
}
int day_diff(int yy,int mm,int dd,int yyy,int mmm,int ddd)
{
int day=0;
if(yyy-yy>=0){
if(yyy-yy>0){
for(int i=yy+1;i<yyy;i++){
day+=year_back(i); //闰年 366 平年365
}
//先算是末尾年份的第几天
//先判定闰年 平年
if(chance(yyy)){
for(int i=1;i<mmm;i++){
day+=b[i];
}
day+=ddd;
}
else{
for(int i=1;i<mmm;i++){
day+=a[i];
}
day+=ddd;
}
//在判定开始年离开始年结束有多久
if(chance(yy)){
//当前月间隔
day+=b[mm]-dd;
//本年其他月间隔
for(int i=mm+1;i<=12;i++){
day+=b[i];
}
}
else{
//当前月间隔
day+=a[mm]-dd;
//本年其他月间隔
for(int i=mm+1;i<=12;i++){
day+=a[i];
}
}
return day;
}
else{
//如果相等则可以知道在一年
//判定闰年 平年
if(mmm-mm<0) return -1;
if(mmm-mm==0){
if(ddd-dd<0) return -1;
else
return ddd-dd;
}
if(chance(yy)){
for(int i=mm+1;i<mmm;i++){
day+=b[i];
}
day+=b[mm]-dd;
day+=ddd;
}
else{
for(int i=mm+1;i<mmm;i++){
day+=a[i];
}
day+=a[mm]-dd;
day+=ddd;
}
return day;
}
}
else
{
return -1; //无法判断
}
}
int main(void){
scanf("%d-%d-%d",&yy,&mm,&dd);
scanf("%d-%d-%d",&yyy,&mmm,&ddd);
cout << day_diff(yy,mm,dd,yyy,mmm,ddd);
return 0;
}
日期间隔手写
最新推荐文章于 2024-10-17 21:05:59 发布
该代码实现了一个C++程序,用于计算两个日期之间的天数差。它首先定义了平年和闰年的天数数组,然后通过一个函数判断是否为闰年,并返回该年的天数。主函数中读取输入的开始和结束日期,调用day_diff函数计算差值并输出结果。程序考虑了月份和闰年的不同情况。
摘要由CSDN通过智能技术生成