C/C++编程学习 - 第11周 ① 第几天?

题目链接

题目描述

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

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

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

Sample Input

1985/1/20
2006/3/12

Sample Output

20
71

思路

由于闰年的二月有29天,所以需要判断年份是否为闰年,以及月份是否大于二月,可以用一个数组保存每个月的天数。

C++代码:

#include<bits/stdc++.h>
using namespace std;
int num[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main()
{
	int Y, M, D;
	while(scanf("%d/%d/%d", &Y, &M, &D) != EOF)
	{
		int ans = D;
		for(int i = 0; i < M; i++)
			ans += num[i];
		if(((Y % 4 == 0 && Y % 100 != 0) || Y % 400 == 0) && M >= 3) ans++;
		cout << ans << endl;
	}
	return 0;
}

当然,你也可以不用数组保存每个月的天数,但是写着会累一点点,比如说这样:

C语言代码:

#include<stdio.h>
int main()
{
	int YYYY, MM, DD, ans;
	while(scanf("%d/%d/%d", &YYYY, &MM, &DD) != EOF)
	{
		if((YYYY % 4 == 0 && YYYY % 100 != 0) || (YYYY % 400 == 0))
		{
			if(MM == 1)
				ans = DD;
			else if(MM == 2)
				ans = 31 + DD;
			else if(MM == 3)
				ans = 31 + 29 + DD;
			else if(MM == 4)
				ans = 31 + 29 + 31 + DD;
			else if(MM == 5)
				ans = 31 + 29 + 31 + 30 + DD;
			else if(MM == 6)
				ans = 31 + 29 + 31 + 30 + 31 + DD;
			else if(MM == 7)
				ans = 31 + 29 + 31 + 30 + 31 + 30 + DD;
			else if(MM == 8)
				ans = 31 + 29 + 31 + 30 + 31 + 30 + 31 + DD;
			else if(MM == 9)
				ans = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + DD;
			else if(MM == 10)
				ans = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + DD;
			else if(MM == 11)
				ans = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + DD;
			else if(MM == 12)
				ans = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + DD;
			printf("%d\n", ans);
		}
		else
		{
			if(MM == 1)
				ans = DD;
			else if(MM == 2)
				ans = 31 + DD;
			else if(MM == 3)
				ans = 31 + 28 + DD;
			else if(MM == 4)
				ans = 31 + 28 + 31 + DD;
			else if(MM == 5)
				ans = 31 + 28 + 31 + 30 + DD;
			else if(MM == 6)
				ans = 31 + 28 + 31 + 30 + 31 + DD;
			else if(MM == 7)
				ans = 31 + 28 + 31 + 30 + 31 + 30 + DD;
			else if(MM == 8)
				ans = 31 + 28 + 31 + 30 + 31 + 30 + 31 + DD;
			else if(MM == 9)
				ans = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + DD;
			else if(MM == 10)
				ans = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + DD;
			else if(MM == 11)
				ans = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + DD;
			else if(MM == 12)
				ans = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + DD;
			printf("%d\n", ans);
		}
	}
	return 0;
}

看起来还挺有艺术效果的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水蛙菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值