输入某年某月某天,求这个日期是本年的第几天

引用了大佬了,加入了自己的一些改进改进版本

  • 自己添加的
//【题目:输入某年某月某日,判断这一天是这一年的第几天】

#include<stdio.h>

int main()
{
	int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};     //输入一年中所有月份
	int i,y,m,d,s,sh,day=0;									   //i用来循环计数,y用来判断是否是闰年,闰年二月会多一天
	printf("请输入 年 月 日,中间可以用空格隔开:");
	scanf("%d %d %d",&y,&m,&d);
	if(y%400==0 || (y%100!=0&&y%4==0)) //判断闰年 
	{
		month[2]+=1;
	}
	for(i=0;i<m;i++)
	{
		day+=month[i];                                      //day计算天数,把前面的天数加在一起
	}
	for(sh=13;m<=sh;sh--)
	{
		s+=month[sh];
		printf("%d",sh);
	}
	day+=d;
	s+=month[m]-d;
	printf("今年已经过去了:%d 天\n还剩下:%d 天\n记得珍惜剩下的日子~\n",day,s);
	return 0;
}
//2023 10 8  281
//2001 05 16 136

  • 方法一for写法
//题目:输入某年某月某日,判断这一天是这一年的第几天?

#include<stdio.h>

int main()
{
	int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	int i,y,m,d,day=0;
	scanf("%d %d %d",&y,&m,&d);
	if(y%400==0 || (y%100!=0&&y%4==0)) //判断闰年 
	{
		month[2]+=1;
	}
	for(i=0;i<m;i++)
	{
		day+=month[i];
	}
	day+=d;
	printf("%d",day);
	return 0;
}
//2023 10 8  281
//2001 05 16 136

  • 方法二 switch写法
    #include<stdio.h>
    int main()
    {
    	int y,m,d,sum=0,flag=0;
    	scanf("%d %d %d",&y,&m,&d);
    	switch(m)
    	{
    		case 1:sum=0;break;
    		case 2:sum=31;break;
    		case 3:sum=59;break;
    		case 4:sum=90;break;
    		case 5:sum=120;break;
    		case 6:sum=151;break;
    		case 7:sum=181;break;
    		case 8:sum=212;break;
    		case 9:sum=243;break;
    		case 10:sum=273;break;
    		case 11:sum=304;break;
    		case 12:sum=334;break;
    		default:sum=0;break;
    	}
    	if((y%400==0)||(y%100!=0&&y%4==0)) //判断闰年
    		flag=1;
    	if(m>2 && flag)
    	{
    		sum+=1;
    	}
    	sum+=d;
    	printf("%d",sum);
    	return 0;	
    }
    //跟上面一样只是改成了switch写法,可见for循环有多好用

    这么看来for循环比switch循环方便了很多啊!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以通过计算这一天与这一11日之间的天数差来确定这一天是这一第几天。具体步骤如下: 1. 计算这一11日到这一的天数总和,记为days。 2. 如果这一是闰输入份大于2,则需要加上1天。 3. 将输入份之前的所有份的天数加上,记为monthDays。 4. 将输入的日数加上monthDays和days,即为这一天是这一第几天。 例如,输入2021315日,则: 1. 11日到31日的天数为31+28=59天。 2. 2021不是闰,因此不需要加1天。 3. 315日之前的所有份的天数为31天,因此monthDays=31。 4. 这一天是第15天,因此这一天是这一的第59+31+15=105天。 ### 回答2: 输入某年某月某日,需要先判断这一是否为闰。闰是指能够被4整除但不能被100整除的份,或者是能够被400整除的份,例如2000。判断完份是否为闰后,再统计这一天是这一第几天。 具体的方法是,先算出这个之前所有份的天数之和,再加上这个的天数,如果是闰且这个在2份之后,还需要再加一天。 举个例子,假设输入日期是20211021日,首先需要判断这一是不是闰。2021不是闰,因为不能被4整除。然后将十之前所有份的天数加起来,131天+228天(因为不是闰)+331天+430天+531天+630天+731天+831天+930天,总共是273天。再加上这个的21天,总共是294天。 因此,20211021日是这一的第294天。 这个方法在程序中可以用不同的编程语言实现,例如C++、Python等。实现时需要注意输入日期格式和闰判断的条件。 ### 回答3: 首先需要了解一中各份的天数。一共有365或366天,一般情况下,我们把一按照365天计算。其中1、3、5、7、8、10、12为31天,4、6、9、11为30天,2不同份天数不同,闰为29天,平为28天。 现在输入年月日,我们需要判断该是否为闰(被4整除但不被100整除或被400整除的份为闰),如果是闰,2就有29天,否则为28天。接着,利用输入年月日,计算出当的前几个份所包含的天数和当的天数,即可得到该天是该第几天。 以202235日为例,该为平,前两个份共有31+28=59天,35日是第5天,因此35日是2022的第64天。 计算公式: 1、判断是否为闰: (1)能被4整除但不能被100整除的份为闰,如2004就是闰,1900不是闰。 (2)能被400整除的份也是闰,如2000是闰。 2、计算天数: 以35日为例,2022前两个份天数之和为31+28=59,3份天数为5,则总天数为59+5=64。数学表达式为: 前两个份天数之和+当天数=总天数 如果1219日是2000第几天,计算方法如下: 第一步:判断是否为闰。2000能被400整除,是闰。 第二步:根据每个份的天数计算前11个份的天数总和,即1-11的天数之和为:31+29+31+30+31+30+31+31+30+31+30=351。 第三步:加上当天数,即:351+19=370。 第四步:得出答案:1219日是2000的第370天。 综上所述,计算某年某月某日是该第几天,需要了解一中各份的天数,再判断该是否为闰,最后计算前几个份的天数总和和当天数即可得出答案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值