杭电OJ 2005. 第几天?

本文介绍了一个简单的算法问题,即如何将指定的日期转换为该年的第几天。文章详细解释了闰年的判断标准,并提供了一段C++代码示例,演示了如何通过计算得出任意给定日期是一年中的第几天。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

Problem Description

给定一个日期,输出这个日期是该年的第几天。

 

Input

输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。

 

Output

对于每组输入数据,输出一行,表示该日期是该年的第几天。

 

Sample Input

1985/1/20

2006/3/12

 

Sample Output

20

71

 

解题思路:

这是一道练习基本操作的题目,没有难度,前提是要知道闰年的定义:

闰年是公历中的名词。闰年分为普通闰年和世纪闰年。

普通闰年:能被4整除但不能被100整除的年份为普通闰年。(如2004年就是闰年,1999年不是闰年);

世纪闰年:能被400整除的为世纪闰年。(如2000年是世纪闰年,1900年不是世纪闰年);

 

另外一点,该题目考察了几个运算符号的优先级,这些基础知识要掌握扎实。我就是刚开始记错了!和%的优先级,导致判断语句写错了,提交若干次都是WA,百度后才恍然大悟,要是在重要的上机考试中遇到这类问题,岂不是凉凉?贴一张运算符优先级的次序表,多看两眼也就记住了,另外可以疯狂地用括号约束来保证符号的优先级。

 

实现(C++):

#include <iostream>
using namespace std;

int month_days[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	
int main(){
	
	int year, month, day;
	char a, b; //a,b分别代表两个“/”
	
	while(cin>>year>>a>>month>>b>>day){
		if((!(year%4)&&(year%100))||!(year%400))
			month_days[1]=29;
		else
			month_days[1]=28;
		
		int total_days=0;	
		for(int i=0; i<month-1; i++)
			total_days+=month_days[i];
		
		total_days+=day;
		
		cout<<total_days<<endl;
		
	}
	return 1;
} 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值