最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++計算任意兩個日期天數(shù)差的方法詳解

 更新時間:2024年02月04日 09:39:23   作者:polokalamu  
這篇文章主要為大家詳細介紹了如何利用C++實現(xiàn)任意兩個日期天數(shù)差,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下

1.思路

這個問題有三種情況:同年同月、同年不同月、不同年。

同年同月非常容易,較難解決的是后兩個。

思路為下:

1.計算日期在前的一年到年底的天數(shù)

2.計算日期在后的一年到年初的天數(shù)

3.計算中間年份的天數(shù)

以上為解決不同年的思路。

同年不同月的思路整體差不多,也是計算前一個月到月底的天數(shù)、后一個月到月初的天數(shù)、中間月份的天數(shù)。

2.代碼實現(xiàn)

我建立了三個函數(shù):months1–計算到年底的天數(shù)差,months2–計算到年初的天數(shù)差,years1–計算兩年之間的天數(shù)差。還有一個就是閏年判斷函數(shù)lapeyear,用來判斷一年中的二月有沒有29天。

int months1(int year, int month, int date)//計算到年底日差的函數(shù)
{
    int i, d = 0;
    int years[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    if (lapeyear(year))years[1] = 29;
    for (i = 11; i > month - 1; i--)
    {
        d += years[i];
    }
    d = d + years[month - 1] - date;
    return d;
}
int months2(int year, int month, int date)//計算到年初日差的函數(shù)
{
    int i, d = 0;
    int years[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    if (lapeyear(year))years[1] = 29;
    for (i = 0; i < month - 1; i++)
    {
        d += years[i];
    }
    d += date;
    return d;
}
int years1(int year1, int year2)//計算兩年間的天數(shù)
{
    int d = 0, i, r = 0, z = 0;
    if (year1 < year2)
    {
        for (i = year1 + 1; i < year2; i++)
        {
            if (lapeyear(i))r++;//兩年之間有多少個閏月
        }
        d = (year2 - year1 - 1) * 365 + r;
    }
    else
    {
        for (i = year2 + 1; i < year1; i++)
        {
            if (lapeyear(i))r++;//兩年之間有多少個閏月
        }
        d = (year1 - year2 - 1) * 365 + r;
    }
    return d;
}

3.完整代碼

以下為全部的代碼

#include<iostream>
using namespace std;
int lapeyear(int year2)//閏年判斷函數(shù)
{
	if ((year2 % 400 == 0) || (year2 % 4 == 0 && year2 % 100 != 0))
		return 1;
	else return 0;
}
int years1(int year1, int year2)//計算兩年間的天數(shù)
{
	int d = 0, i, r = 0, z = 0;
	if (year1 < year2)
	{
		for (i = year1 + 1; i < year2; i++)
		{
			if (lapeyear(i))r++;//兩年之間有多少個閏月
		}
		d = (year2 - year1 - 1) * 365 + r;
	}
	else
	{
		for (i = year2 + 1; i < year1; i++)
		{
			if (lapeyear(i))r++;//兩年之間有多少個閏月
		}
		d = (year1 - year2 - 1) * 365 + r;
	}
	return d;
}
int months2(int year, int month, int date)//計算到年初日差的函數(shù)
{
	int i, d = 0;
	int years[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	if (lapeyear(year))years[1] = 29;
	for (i = 0; i < month - 1; i++)
	{
		d += years[i];
	}
	d += date;
	return d;
}
int months1(int year, int month, int date)//計算到年底日差的函數(shù)
{
	int i, d = 0;
	int years[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	if (lapeyear(year))years[1] = 29;
	for (i = 11; i > month - 1; i--)
	{
		d += years[i];
	}
	d = d + years[month - 1] - date;
	return d;
}
int main()
{
	int year1, year2, month1, month2, date1, date2;
	int d = 0, i, m = 0;
	int x1, x2;//記錄兩個日期分別到年初和年底的天數(shù)
	int years[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	cout << "請輸入兩個日期" << endl;
	cin >> year1 >> month1 >> date1 >> year2 >> month2 >> date2;
	if (year1 == year2)//大前提,同年時
	{
		if (lapeyear(year1))years[1] = 29;
		if (month1 == month2)d = date1 > date2 ? date1 - date2 : d = date2 - date1;//同年同月
		if (month1 != month2)//同年不同月
		{
			//計算方法為求出兩月之前的天數(shù),然后求前一個月剩余的天數(shù)和后一個月已經(jīng)開始的天數(shù)
			if (month1 < month2)
			{
				{
					for (i = month1; i < month2 - 1; i++)
					{
						m += years[i];
					}
				}
				d = years[month1 - 1] - date1;
				d += m + date2;
			}
			else
			{
					for (i = month2; i > month1 - 1; i++)
					{
						m += years[i];
		            }
				d = years[month2 - 1] - date2;
				d += m + date1;
			}
		}
	}
	else//求不同年的任意日期的天數(shù)差
	{
		if (year1 > year2)
		{
			x1 = months1(year2, month2, date2);//x1為到年底的日差,x2為到年初的日差
			x2 = months2(year1, month1, date1);
			d = years1(year2, year1);
			d += x1 + x2;
		}
		else
		{
			x2 = months2(year2, month2, date2);
			x1 = months1(year1, month1, date1);
			d = years1(year1, year2);
			d += x1 + x2;
		}

	}
	cout << "兩年之間的天數(shù)差為" << " " << d;
	return 0;
}

到此這篇關(guān)于C++計算任意兩個日期天數(shù)差的方法詳解的文章就介紹到這了,更多相關(guān)C++計算日期天數(shù)差內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ffmpeg?在?win平臺下的編譯以及集成

    ffmpeg?在?win平臺下的編譯以及集成

    這篇文章主要為大家介紹了ffmpeg?在?win平臺下的編譯以及集成詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2023-05-05
  • C++實現(xiàn)LeetCode(228.總結(jié)區(qū)間)

    C++實現(xiàn)LeetCode(228.總結(jié)區(qū)間)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(228.總結(jié)區(qū)間),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++ 搬水果貪心算法實現(xiàn)代碼

    C++ 搬水果貪心算法實現(xiàn)代碼

    這篇文章主要介紹了C++ 搬水果貪心算法實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++算法學(xué)習(xí)之分支限界法的應(yīng)用

    C++算法學(xué)習(xí)之分支限界法的應(yīng)用

    分支限界法常以廣度優(yōu)先或以最小耗費(最大效益)優(yōu)先的方式搜索問題的解空間樹。本文將詳細講解分支限界法的應(yīng)用,需要的可以參考一下
    2022-05-05
  • C++的頭文件和實現(xiàn)文件詳解

    C++的頭文件和實現(xiàn)文件詳解

    這篇文章主要介紹了C++的頭文件和實現(xiàn)文件詳解的相關(guān)資料,需要的朋友可以參考下
    2015-01-01
  • C語言必背的一些經(jīng)典程序代碼實例

    C語言必背的一些經(jīng)典程序代碼實例

    C語言是一種高級編程語言,具有很多優(yōu)點,下面這篇文章主要給大家介紹了關(guān)于C語言必背的一些經(jīng)典程序代碼,文中通過詳細的實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • C++如何計算結(jié)構(gòu)體與對象的大小

    C++如何計算結(jié)構(gòu)體與對象的大小

    這篇文章主要給大家介紹了關(guān)于C++如何計算結(jié)構(gòu)體與對象大小的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • C語言 strcpy和memcpy區(qū)別詳細介紹

    C語言 strcpy和memcpy區(qū)別詳細介紹

    這篇文章主要介紹了C語言 strcpy和memcpy區(qū)別詳細介紹的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C++中單鏈表的建立與基本操作

    C++中單鏈表的建立與基本操作

    以下是對C++中單鏈表的建立與基本操作進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • C語言獲取數(shù)組長度的幾種方法

    C語言獲取數(shù)組長度的幾種方法

    這篇文章主要介紹了C語言獲取數(shù)組長度的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評論

隆林| 湘潭市| 伊川县| 麦盖提县| 沅陵县| 潞西市| 黑水县| 罗山县| 利辛县| 磐安县| 大洼县| 兴安盟| 盐亭县| 宁化县| 贡觉县| 崇义县| 齐齐哈尔市| 苏州市| 错那县| 铁力市| 边坝县| 通河县| 安仁县| 西乌| 肥西县| 司法| 辽宁省| 仁寿县| 卢湾区| 抚顺县| 台州市| 金坛市| 含山县| 华安县| 泸溪县| 油尖旺区| 会昌县| 山东省| 谷城县| 夏邑县| 随州市|