-1

説明させてください: 入力で得たもの: 例: 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;
}
4

3 に答える 3

1

ここのように見えますが、毎月 31 日あります。

while(D>month)
{
    M++;
    D-=31;
}

また、この問題とは関係なく、うるう年と 2000 年 (例外の例外) の規則も確認する必要があります。

于 2015-10-25T12:22:33.470 に答える