zoukankan      html  css  js  c++  java
  • 求日期差值

    【codeup 1928】
    输入两个日期,求两者相差的天数。(对连续的两天,规定相差2)
    样例输入:

    20130101
    20130105
    

    样例输出:

    5
    

    思路:
    假设两个日期,第一个比第二个小。让第一个日期不断累加,直到两者相等。
    为减少累加次数,先判断年份之差,如果至少相差两年,就让结果先累加365或366(根据平闰年)。
    如果年份相差一年以内,再对日期累加,直到两者相等。

    用一个二维数组month[13][2]存放每个月的最大天数。第一维表示月份(从1开始),第二维为0表示平年,1表示闰年。
    在每次循环中对天数+1。如果天数达到该月的最大天数+1,则将月份+1,天数重置为1。同理,如果月份达到13,则将年份+1,月份重置为1。

    代码:

    #include <iostream>   
    using namespace std;
    
    //判断平闰年
    int isLeap(int year)
    {
    	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
    		return 1;
    	else
    		return 0;
    }
    
    int main()
    {
    	int date1, date2;    //输入的两个日期
    	int y1, m1, d1, y2, m2, d2;
    	int result = 1;
    	int month[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}
    	};
    	cin >> date1 >> date2;
    	//year1
    	y1 = date1 / 10000;
    	m1 = date1 % 10000 / 100;
    	d1 = date1 % 100;
    	//year2
    	y2 = date2 / 10000;
    	m2 = date2 % 10000 / 100;
    	d2 = date2 % 100;
    	if (y1 > y2)    //若第一个大则交换
    	{
    		int temp = y1;
    		y1 = y2;
    		y2 = temp;
    	}
    	while ((y2 - y1) > 1)    //年份相差大于1则先对结果整年累加
    	{
    		if (isLeap(y1) == 0)
    			result += 365;
    		else
    			result += 366;
    	}
    	while (y1 < y2 || m1 < m2 || d1 < d2)    //累加天数,直到两者相等
    	{
    		++d1;
    		if (d1 == month[m1][isLeap(y1)] +1)
    		{
    			++m1;
    			d1 = 1;
    		}
    		if (m1 == 13)
    		{
    			++y1;
    			m1 = 1;
    		}
    		++result;
    	}
    	cout << "result:" << result;
    }
    
  • 相关阅读:
    面向对象编程总结Python
    垃圾收集器与内存分配策略
    自定义异常、异常处理注意点
    关于线程【一】——线程创建、停止、interrupted()和isInterrupted()区别
    Java内存区域
    HotSpot虚拟机对象
    异常——try、catch、finally、throw、throws
    关于线程【二】——线程同步和异步
    fillder代理调试
    新鲜出炉的Asp.Net MVC电子书
  • 原文地址:https://www.cnblogs.com/banmei-brandy/p/14285285.html
Copyright © 2011-2022 走看看