当前位置: 首页 > article >正文

C++练习题之计算天数

 

【问题描述】

定义一个结构体变量用以记录一个日期(包括年,月,日)。输入一个日期,计算该日是本年的第几天。
【输入形式】

输入日期(包括年 月 日),是三个整数,以空格分隔。
【输出形式】

输出该日是本年的第多少天。
【样例输入】

2003 3 25

【样例输出】

84

【样例说明】

输入一个日期,输出该日是本年的第几天。

题解如下:

#include <iostream>
using namespace std;

int main()
{
	struct Date
	{
		int year; 
		int month;
		int day;	
	};
	
	struct Date d;
	
	cin >> d.year >> d.month >> d.day;
	
	int num = 0; 
	//判断 
	
	if (d.year % 4 == 0 || d.year % 400 == 0)/*闰年*/
	{
		for (int i = 1; i <= d.month; i++) //i指代月份 
		{
			if(i <= 7)//前7月 
			{
				if((i -1) != 2 && (i - 1) % 2 == 0 && i != 1) 
				{
					num += 30;
				} 
				else if((i-1) == 2) // i == 3 月  
				{
					num += 29;
				}
				else if((i -1) % 2 != 0)
				{
					num +=  31;
				}		
			}
			else//8月之后 
			{
				if((i - 1) % 2 == 0  || i-1 == 7)
				{
					num += 31;
				}
				
				else if((i-1) % 2 != 0)
				{
					num += 30;
				}
			}
					
		}  
		
	}
	else/*平年*/
	{
		for (int i = 1; i <= d.month; i++)
		{
			if(i <= 7)//前7月 
			{
				if((i -1) != 2 && (i - 1) % 2 == 0 && i != 1) 
				{
					num += 30;
				} 
				else if((i-1) == 2) // i == 3 月  
				{
					num += 28;
				}
				else if((i -1) % 2 != 0)
				{
					num +=  31;
				}		
			}
			else//8月之后 
			{
				if((i - 1) % 2== 0  ||(i-1) == 7)
				{
					num += 31;
				}
				
				else if((i-1) % 2 != 0)
				{
					num += 30;
				}
			}
		
		}				
	}

	cout << num + d.day<<endl;
	return 0 ;	
}

首先判断平年和闰年以区分 2月份的天数。

然后再判断月份 。

因为i是当前月份,那么要加的 “整块的月 的 天数” 就 必须是你前一个月的所以 就要判断(i-1).

这里“整块的月 的天数”指 30 31 29 28这类的。

而且要排除掉1月份,因为给1 月份就会出现0% 2 = 0的情况,这显然是我们不需要的 。

然后写了循环,i 从 1 开始 到 你输入的月份。每次 i++ 这样就实现了 遍历每个 月份。

所以  在每次 符合条件的代码块中 用+=即可。不要 i * 30这种。 之前犯的错。


	if (d.year % 4 == 0 || d.year % 400 == 0)/*闰年*/
	{
		for (int i = 1; i <= d.month; i++) //i指代月份 
		{
			if(i <= 7)//前7月 
			{
				if((i -1) != 2 && (i - 1) % 2 == 0 && i != 1) 
				{
					num += 30;
				} 
				else if((i-1) == 2) // i == 3 月  
				{
					num += 29;
				}
				else if((i -1) % 2 != 0)
				{
					num +=  31;
				}		
			}
			else//8月之后 
			{
				if((i - 1) % 2 == 0  || i-1 == 7)
				{
					num += 31;
				}
				
				else if((i-1) % 2 != 0)
				{
					num += 30;
				}
			}
					
		}  
		
	}
	

=================================================================

记录学习。


http://www.kler.cn/a/449367.html

相关文章:

  • SpringBoot3-第二篇(Web开发)
  • 使用FreeNAS软件部署ISCSI的SAN架构存储(IP-SAN)练习题
  • 物联网水文观测设备
  • 蓝桥杯物联网开发板硬件组成
  • 汽车IVI中控开发入门及进阶(41):视频播放器MPlayer
  • 单片机的内存是指RAM还是ROM
  • Android Studio Gradle Sync timeout
  • H5海康WS在线视频播放器:打造高效流畅的Web视频体验
  • BufferedWriter(废稿)
  • JUC并发编程之Thread学习笔记
  • count(1)、count(_)与count(列名)的区别?
  • 七牛云短信服务
  • 《前端web开发-HTML5基础》
  • 204页PPT金税四期监管要求与最新政策及风险防范-培训课件
  • Node二、Node.js 模块化、es6 软件包、Express - 框架
  • FastStone 10.x 注册码
  • springboot分布式id,基于snowflake的分布式统一id生成工具
  • 协作机器人做“按摩理疗”,机器人如何感知力度呢?
  • GoCD 持续集成和部署工具配置指南(CentOS 7)
  • Kafka常用集群配置参数