计算到任意日期的总天数

编程序实现:输入任意一个日期的年、月、日的值,求出从公元1年1月1日到该日期前一年的年末总共有多少天,到该日期前一个月的月末总共有多少天,到这一天总共有多少天。假定从公元第一天开始,就实施格里高利历法。格里高利历法的置闰规则是400年97闰,也可以概括为:四闰百不闰,四百闰。

输入格式:

输入三个代表年、月、日的正整数,以空格分隔。

输出格式:

输出三个总天数,数据之间以换行符分隔,最后换行。

输入样例:

2012 3 29

输出样例:

734502
734562
734591

闰年的判断方法: 公历纪年法中,能被4整除的大多是闰年,但能被100整除而不能被400整除的年份不是闰年

#include<stdio.h>
int diagnosis(int number);
int main()
{
	int date[10];
	int i, j, count = 0;
	int sum1, sum2, sum3;
	for (i = 0;i < 3;i++)
		scanf_s("%d",&date[i]);
	//写年——至上一年年末的天数
	for (j = 1;j <date[0];j++)
	{
		//查出闰年的个数
		if (diagnosis(j))
			count++;
	}
	sum1 = 366 * count + 365 * (date[0] - 1 - count);
	printf("%d\n", sum1);
	//写月——至上一个月月末的天数
	if (diagnosis(date[0]))
	{
		switch (date[1])//该年为闰年,至上一月的天数
		{ 
		case 1:sum2 = sum1;printf("%d\n", sum2);break;
		case 2:sum2 = sum1 + 31;printf("%d\n", sum2);break;
		case 3:sum2 = sum1 + 60;printf("%d\n", sum2);break;
		case 4:sum2 = sum1 + 91;printf("%d\n", sum2);break;
		case 5:sum2 = sum1 + 121;printf("%d\n", sum2);break;
		case 6:sum2 = sum1 + 152;printf("%d\n", sum2);break;
		case 7:sum2 = sum1 + 182;printf("%d\n", sum2);break;
		case 8:sum2 = sum1 + 213;printf("%d\n", sum2);break;
		case 9:sum2 = sum1 + 244;printf("%d\n", sum2);break;
		case 10:sum2 = sum1 + 274;printf("%d\n", sum2);break;
		case 11:sum2 = sum1 + 305;printf("%d\n", sum2);break;
		case 12:sum2 = sum1 + 335;printf("%d\n", sum2);break;
		}
	}
	else
	{
		switch (date[1])//该年为平年,至上一月的天数
		{
		case 1:sum2 = sum1;printf("%d\n", sum2);break;
		case 2:sum2 = sum1 + 31;printf("%d\n", sum2);break;
		case 3:sum2 = sum1 + 59;printf("%d\n", sum2);break;
		case 4:sum2 = sum1 + 90;printf("%d\n", sum2);break;
		case 5:sum2 = sum1 + 120;printf("%d\n", sum2);break;
		case 6:sum2 = sum1 + 151;printf("%d\n", sum2);break;
		case 7:sum2 = sum1 + 181;printf("%d\n", sum2);break;
		case 8:sum2 = sum1 + 212;printf("%d\n", sum2);break;
		case 9:sum2 = sum1 + 243;printf("%d\n", sum2);break;
		case 10:sum2 = sum1 + 273;printf("%d\n", sum2);break;
		case 11:sum2 = sum1 + 304;printf("%d\n", sum2);break;
		case 12:sum2 = sum1 + 334;printf("%d\n", sum2);break;
		}
	}
	//写天——至该天的天数
	sum3 = sum2 + date[2];
	printf("%d", sum3);
	return 0;
}
//判断闰年的函数
int diagnosis(int number)
{
	int flag = 0;
	if (((number % 4 == 0) && (number % 100 != 0)) || number % 400 == 0)
		flag = 1;
	return flag;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值