Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果您输入了日期和要添加的x秒数,如何找出闰年数_C_Date_Seconds_Leap Year - Fatal编程技术网

C 如果您输入了日期和要添加的x秒数,如何找出闰年数

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;

让我解释一下: 在输入时,您得到: 例如。: 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;
}
#包括
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年开始?或者你想知道某一年是否是闰年?