日期问题算法

这里所指的日期问题是,给出两个年月日,求出它们之间间隔的天数。
思路:

  1. 创建类,包含年月日,并给出迭代函数 nextday(),迭代函数需要考虑随着day增加,月与年相应的变化,其中不可忽略闰年。
  2. 创建初始化函数,类对象不断自我迭代,将第0~第500000天对应到一个三维数组上,三维数组的三维自然是年月日。
  3. 取两个年月日对应的三维数组相减,得到相隔天数。

代码如下:

/*日期类问题*/
#include <iostream>
#include <stdio.h>
#include <algorithm>
#define isyeap(x) (x%100!=0 && x%4==0)||(x%400==0)?1:0
int MON[13][2]={
                0,0,
                31,31,
                28,29,
                31,31,
                30,30,
                31,31,
                30,30,
                31,31,
                31,31,
                30,30,
                31,31,
                30,30,
                31,31};
using namespace std;

int days[5100][13][32];

struct date{
    int year;
    int month;
    int day;
    void nextDay(){   //结构体函数引用结构体里面的变量,不需要声明
        day++;
        if(day>MON[month][isyeap(year)]){
            day = 1;
            month++;
            if(month>12){
                year++;
                month = 1;
            }
        }
    }
};
void init(){
    date date;
    date.day=1;date.month=1;date.year=0;
    int num_day = 1;
    while(date.year<=5000){
        days[date.year][date.month][date.day] = num_day;
        date.nextDay();
        num_day++;
    }
}
int main()
{
    init();
    int y1,y2,m1,m2,d1,d2;
    scanf("%d%d%d%d%d%d",&y1,&m1,&d1,&y2,&m2,&d2);
    printf("%d",abs(days[y1][m1][d1]-days[y2][m2][d2]));
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
日期计算在Java中通常使用java.util.Calendar类进行实现。通过该类,可以计算两个日期之间的天数、月数、年数等。下面是一些基本的日期计算方法: 1. 计算两个日期之间的天数 ```java Calendar cal1 = Calendar.getInstance(); cal1.set(2019, 8, 1); Calendar cal2 = Calendar.getInstance(); cal2.set(2019, 8, 10); long diff = cal2.getTimeInMillis() - cal1.getTimeInMillis(); long days = diff / (24 * 60 * 60 * 1000); System.out.println("Days between two dates: " + days); ``` 2. 计算两个日期之间的月数 ```java Calendar cal1 = Calendar.getInstance(); cal1.set(2019, 8, 1); Calendar cal2 = Calendar.getInstance(); cal2.set(2020, 3, 10); int months = (cal2.get(Calendar.YEAR) - cal1.get(Calendar.YEAR)) * 12 + cal2.get(Calendar.MONTH) - cal1.get(Calendar.MONTH); System.out.println("Months between two dates: " + months); ``` 3. 计算两个日期之间的年数 ```java Calendar cal1 = Calendar.getInstance(); cal1.set(2019, 8, 1); Calendar cal2 = Calendar.getInstance(); cal2.set(2021, 8, 1); int years = cal2.get(Calendar.YEAR) - cal1.get(Calendar.YEAR); System.out.println("Years between two dates: " + years); ``` 4. 计算某个日期加上一定天数后的日期 ```java Calendar cal = Calendar.getInstance(); cal.set(2019, 8, 1); int daysToAdd = 10; cal.add(Calendar.DAY_OF_MONTH, daysToAdd); Date newDate = cal.getTime(); System.out.println("New date: " + newDate); ``` 5. 计算某个日期减去一定天数后的日期 ```java Calendar cal = Calendar.getInstance(); cal.set(2019, 8, 11); int daysToSubtract = 10; cal.add(Calendar.DAY_OF_MONTH, -daysToSubtract); Date newDate = cal.getTime(); System.out.println("New date: " + newDate); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值