c语言计算一年中的第几天

在网上看到一个非常巧妙高级的计算思想,正好C语言作业有计算一年中第几天的题,就借鉴下算法。

借鉴的原博客

#include <stdio.h>
#include <stdlib.h>

struct {
	int month;
	int day;
	int year;
}date;
int main()
{	
	int m1;
	printf("请输入年月日");
	scanf("%d",&date.year,&date.month,&date.day);
	m1 = (date.month+9)%12;
	if(m1<10){
		date.day = (m1*306 + 5)/10 + (date.day - 1);
		if(((date.year%4==0)&&(date.year%100!=0))||date.year%400==0)
			date.day = date.day+60;
		else date.day = date.day+59;
	}
	else
		if(m1==2) date.day = date.day+31;
	printf("这是%d年中的第%d天",date.year,date.day);
    return 0;
}
算法解析

m1是用来计算该月到三月的间隔月数,如果m1小于10说明是二月之外的任何一个月。(m1*306 + 5)/10 用于计算到当前月到3月1日间的天数,306=365-31-28(1月和2月),5是全年中不是31天月份的个数。
然后判断是闰年则加60(1月和2月),不是就加59。
最后如果m1大于10,说明是一个月。若是二月就加31(一月的天数),是一月就直接输出。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值