IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 今天到下次生日中间隔的天数C++ -> 正文阅读

[C++知识库]今天到下次生日中间隔的天数C++

最近终于下定决心搞点小项目,练习自己的技术,做完了保存在这里,供大家交流。
以下程序完成一个日期到下次生日之间间隔的天数,可以直接运行。

#include<stdio.h>
#include <stdlib.h>
int Day[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
bool isLeap(int year)	//判断是否为闰年
{
	return (year % 4 == 0 || year % 400 == 0) && (year % 100 != 0);
}
int daysInMonth(int year, int month)	//返回某个月包含的天数
{
	if (isLeap(year))
	{
		Day[2] = 29;
	}
	return Day[month];
}
bool isLegal(int date[])	//判断日期是否合法
{
	int year = date[0];
	int month = date[1];
	int day = date[2];
	if (!isLeap(year))
	{
		return year > 0 && month > 0 && month <= 12 && day > 0 && day <= Day[month];
	}
	else
	{
		Day[2] = 29;
		return year > 0 && month > 0 && month <= 12 && day > 0 && day <= Day[month];
	}
}
void dateInput(int date[])
{
	while (true)
	{
		scanf("%d.%d.%d", &date[0], &date[1], &date[2]);
		if (isLegal(date))
		{
			break;
		}
		printf("输入日期不合法,请重新输入:\n");
	}
}
int main()
{
	int sum = 0, flag = 0;
	int firstdate[3], seconddate[3];
	printf("请输入当天日期(如:2021.12.2):\n");
	dateInput(firstdate);
	printf("请输入生日(如:2021.12.2):\n");
	dateInput(seconddate);
	if (seconddate[1] == 2 && seconddate[2] == 29)	//先判断最特殊的2月29日
	{
		while (!isLeap(firstdate[0]))	//如果今年不是闰年,就从当天开始一直加到年末
		{
			if (flag == 0)
			{
				for (int i = firstdate[1]; i <= 12; i++)
				{
					sum += daysInMonth(firstdate[0], i);
				}
				sum = sum - firstdate[2];
				flag = 1;
				firstdate[0]++;
				continue;
			}
			if (flag == 1)	//当年份仍然是平年直接加365
			{
				sum += 365;
				firstdate[0]++;
			}
		}
		if (flag == 0)	//如果判断为真,则证明是闰年,接下来分两种情况讨论:一种是今年生日还没有过,一种是今年生日已经过了
		{
			Day[2] = 29;
			if (firstdate[1] < 2 || (firstdate[1] == 2 && firstdate[2] <= 29))
			{
				for (int i = firstdate[1]; i < seconddate[1]; i++)
				{
					sum += daysInMonth(firstdate[0], i);
				}
				sum = sum - firstdate[2] + seconddate[2];	//没过生日直接日期相减
			}
			else
			{
				for (int i = firstdate[1]; i <= 12; i++)
				{
					sum += daysInMonth(firstdate[0], i);
				}
				sum = sum - firstdate[2];
				firstdate[0]++;
				while (!isLeap(firstdate[0]))
				{
					sum += 365;
					firstdate[0]++;
				}
				sum += 60;	//生日已经过了,就得等到下一个闰年
			}
		}
		if (flag == 1)	//判断其年份是否是经历了平年循环后得到的闰年,如果判断为真,则在原来的基础上再加上此年一月份和二月份日子的总数60即可得到总天数
		{
			sum += 60;
		}
	}
	else    //非特殊情况的判断
	{
		if (firstdate[1] < seconddate[1] || (firstdate[1] == seconddate[1] && firstdate[2] <= seconddate[2]))	//生日还没有过
		{
			for (int i = firstdate[1]; i < seconddate[1]; i++)
			{
				if (isLeap(firstdate[0]))
				{
					Day[2] = 29;
					sum += daysInMonth(firstdate[0], i);
				}
				else
				{
					sum += daysInMonth(firstdate[0], i);
				}
			}
			sum = sum - firstdate[2] + seconddate[2];
		}
		else
		{
			for (int i = firstdate[1]; i <= 12; i++)	//生日已经过了
			{	
				if (isLeap(firstdate[0]))
				{
					Day[2] = 29;
					sum += daysInMonth(firstdate[0], i);
				}
				else
				{
					sum += daysInMonth(firstdate[0], i);
				}
			}
			sum = sum - firstdate[2];
			for (int i = 1; i < seconddate[1]; i++) 
			{
				if (isLeap(firstdate[0] + 1))
				{
					Day[2] = 29;
					sum += daysInMonth(firstdate[0], i);
				}
				else
				{
					sum += daysInMonth(firstdate[0], i);
				}
			}
			sum = sum + seconddate[2];
		}
	}
	printf("输入日期到下次生日 (%d.%d) 中间隔 %d 天。\n", seconddate[1], seconddate[2], sum);	//输出结果
	system("pause");
	return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 22:43:27  更:2021-12-28 22:43:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:53:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码