如果您输入了日期和一些要添加的 x 秒,如何找出闰年的数量
Posted
技术标签:
【中文标题】如果您输入了日期和一些要添加的 x 秒,如何找出闰年的数量【英文标题】:how to find out number of leap years if you have entered date and some x seconds to add 【发布时间】:2015-10-25 12:04:29 【问题描述】:所以让我解释一下: 在输入你得到: 例如。: 5 7 1904 5 5 5 675876789 日、月、年时、分、秒和一些数字 k。 在输出中,您需要获得: 4.12.1925。 20:38:14
由于闰年,我不断得到 5.12.1925 20:38:14 并且我的算法在那里中断。如果有人知道如何帮助我,我将在下面发布我的代码?
#include<stdio.h>
int main()
int D, M, G, H, m, s;
unsigned int k;
unsigned int ks,km,kH,kG,kM,kD;
scanf("%d %d %d %d %d %d",&D,&M,&G,&H,&m,&s);
while(G<1900 || G>2015)
scanf("%d %d %d %d %d %d",&D,&M,&G,&H,&m,&s);
int month;
scanf("%u",&k);
if(M == 1)
month=31;
if(M == 2 && G%4==0 && G%100!=0 && G%400==0)
month=29;
if(M == 2 && G%4!=0 && G%100!=0 && G%400!=0)
month=28;
if(M == 3)
month=31;
if(M == 4)
month=30;
if(M == 5)
month=31;
if(M == 6)
month=30;
if(M == 7)
month=31;
if(M == 8)
month=31;
if(M == 9)
month=30;
if(M == 10)
month=31;
if(M == 11)
month=30;
if(M == 12)
month=31;
kG=k/31536000;
G=G+kG;
k=k-kG*31536000;
kM=k/(86400*month);
k=k-kM*86400*month;
kD=k/86400;
k=k-kD*86400;
kH=k/3600;
k=k-kH*3600;
km=k/60;
ks=k-km*60;
s=s+ks;
m=m+km;
H=H+kH;
M=M+kM;
while(s>=60)
m++;
s-=60;
while(m>=60)
H++;
m-=60;
while(H>=24)
D++;
H-=24;
while(D>month)
M++;
D-=31;
while(M>12)
G++;
M-=12;
printf("%d.%d.%4d. %02d:%02d:%02d",D,M,G,H,m,s);
return 0;
【问题讨论】:
“如何找出闰年的数量”尚不清楚。从什么时候开始有多少闰年?自 2000 年以来,自 1970 年以来,自公元 1 年以来?或者您想知道给定年份是否是闰年? 【参考方案1】:你真的应该使用一个像样的库来做到这一点。不仅有闰年,还有闰年。有夏令时,如果你问的是上世纪初的日期,这里和那里会有一些日历变化,你没有机会考虑到这些变化。
至少您需要知道日期的语言环境,因为夏令时因语言环境而异。
也就是说,您计算哪些月份是闰年的逻辑是完全错误的。您需要了解 && 和 || 之间的区别。尝试 G = 2016 和 M = 2:根本不会设置月份(对于月份中的日子来说,这是一个误导性的变量名称)。
【讨论】:
【参考方案2】:好像在这里,你每个月有 31 天:
while(D>month)
M++;
D-=31;
而且,与这个问题无关,您还应该检查闰年和 2000 年的规则(这是例外的例外)。
【讨论】:
您能否更具体地了解闰年的规则。我应该从开始年到结束年进行循环并计算有多少闰年,然后计算这些年的中间值还是?【参考方案3】:闰年条件
如果年份能被 100 整除,那么它必须能被 400 整除才能成为闰年; 如果年份不能被 100 整除,则只有当年份能被 4 整除时才会是闰年;
即
if (((year%100==0) && (year%400==0)) || ((year%100!=0) && (year%4==0))
在某个范围内查找闰年的代码:
int leapyears(int start_year, int ending_year)
int k=0;
while (start_year<=ending year)
//&& operator have higher preference than ||
if (start_year%4==0 && start_year%100!=0 || start_year%400==0)
k++;
start_year++;
return k;
【讨论】:
基本数学:如果年份能被 100 整除,那么它总是能被 4 整除。必须能被 4 整除的是世纪,所以年份必须能被 4 整除400。这就是为什么 2000 年是闰年,1900 年不是,2100 年也不会。以上是关于如果您输入了日期和一些要添加的 x 秒,如何找出闰年的数量的主要内容,如果未能解决你的问题,请参考以下文章