C 如果您输入了日期和要添加的x秒数,如何找出闰年数
让我解释一下: 在输入时,您得到: 例如。: 5 7 1904 5 5 5 675876789 日、月、年、时、分、秒和一些数字k。 在输出时,您需要获得: 4.12.1925. 20:38:14 我经常得到5.12.1925 20:38:14,只是因为闰年,我的算法在那里中断了。如果有人知道如何帮助我,我将在下面发布我的代码C 如果您输入了日期和要添加的x秒数,如何找出闰年数,c,date,seconds,leap-year,C,Date,Seconds,Leap Year,让我解释一下: 在输入时,您得到: 例如。: 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;
#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;
}
#包括
int main()
{
int D,M,G,H,M,s;
无符号整数k;
无符号整数ks、km、kH、kG、km、kD;
扫描(“%d%d%d%d%d%d%d%d”、&d、&M、&G、&H、&M、&s);
while(G2015)
{
扫描(“%d%d%d%d%d%d%d%d”、&d、&M、&G、&H、&M、&s);
}
整月;
scanf(“%u”、&k);
如果(M==1)
{
月=31;
}
如果(M==2&&G%4==0&&G%100!=0&&G%400==0)
{
月=29;
}
如果(M==2&&G%4!=0&&G%100!=0&&G%400!=0)
{
月=28;
}
如果(M==3)
{
月=31;
}
如果(M==4)
{
月=30;
}
如果(M==5)
{
月=31;
}
如果(M==6)
{
月=30;
}
如果(M==7)
{
月=31;
}
如果(M==8)
{
月=31;
}
如果(M==9)
{
月=30;
}
如果(M==10)
{
月=31;
}
如果(M==11)
{
月=30;
}
如果(M==12)
{
月=31;
}
千克=k/31536000;
G=G+kG;
k=k-kG*31536000;
kM=k/(86400*月);
k=k-kM*86400*月;
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;
而(s>=60)
{
m++;
s-=60;
}
而(m>=60)
{
H++;
m-=60;
}
而(H>=24)
{
D++;
H-=24;
}
而(D>月)
{
M++;
D-=31;
}
而(M>12)
{
G++;
M-=12;
}
printf(“%d.%d.%4d.%02d:%02d:%02d”,d,M,G,H,M,s);
返回0;
}
看起来像这样,您每个月有31天:
while(D>month)
{
M++;
D-=31;
}
而且,与此问题无关,您还应该检查闰年和2000年的规则(这是例外的例外情况)。闰年的条件 如果一年可以被100整除,那么它必须被400整除才能成为闰年; 如果一年不能被100整除,那么只有当一年可以被4整除时才是闰年 i、 e 如果((年份%100==0)和&(年份%400==0))| |((年份%100!=0)和&(年份%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;
}
int闰年(int起始年,int结束年)
{
int k=0;
然而,你真的应该使用一个像样的图书馆来做这件事。不仅有闰年,还有夏令时,如果你问的是上世纪初的日期,这里那里会有一些日历的变化,你没有机会考虑到这些变化
至少你需要知道日期的地区,因为夏令时在不同地区是不同的
也就是说,您计算闰年月份的逻辑完全错误。您需要了解&&和| |之间的区别。请尝试G=2016和M=2:months(这是一个误导性的变量名称,表示月份中的天数)一点也不设置。你能更具体地说明闰年的规则吗?我应该从起始年到结束年做一个循环,计算有多少闰年,然后计算这些年的中间值还是?基础数学:如果一年可以被100整除,那么它总是可以被4整除。世纪必须被4整除,所以这一年必须可以被400整除。这就是为什么2000年是闰年,1900年不是,2100年不会是。“如何找出闰年的数量”还不清楚。从什么时候开始有多少闰年?从2000年开始,从1970年开始,从公元1年开始?或者你想知道某一年是否是闰年?