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;
}

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

猜你喜欢

转载自blog.csdn.net/qq_44826711/article/details/113099829