所以让我解释一下:输入你有:例如: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;
}
3 回答
闰年的条件
如果年份可以被100整除,那么它必须被400整除才能成为闰年;如果年份不能被100整除,那么只有当年份可以被4整除时才是闰年;
即,
if(((年%100 == 0)&&(年%400 == 0))||((年%100!= 0)&&(年%4 == 0))
用于查找范围内的闰年的代码:
你应该真的使用一个体面的库来做到这一点 . 不仅有闰年;有夏令时,如果你问上世纪初的日期,这里和那里会有一些日历变化,你没有机会考虑 .
至少您需要知道日期的区域设置,因为夏令时与区域设置不同 .
也就是说,你计算哪些月份是闰年的逻辑是完全错误的 . 您需要了解&&和||之间的区别 . 尝试G = 2016和M = 2:月份(这是一个月内天数的误导性变量名称)根本不会设置 .
好像在这里,你每个月都有31天:
而且,与此问题无关,您还应该检查闰年和2000年的规则(这是例外的例外) .