| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 979 人关注过本帖
标题:计算出任意二个时间之间的天数,不知道哪里出错了
只看楼主 加入收藏
lockeroots
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2016-4-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
计算出任意二个时间之间的天数,不知道哪里出错了
程序代码:
#include<stdio.h>
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};


int ye2(int n,int x,int y)
{
        int i,sum=0;
        if(x>=2)
        {
                if(n%4==0)
                {
                        sum=sum+1;
                        for(i=x-1;i>0;i++)
                        {
                                sum=sum+a[i];
                        }
                }else{

                        for(i=x-1;i>0;i--)
                        {
                        sum=sum+a[i];
                        }
                }
                sum=sum+y;
        }
        return sum;
}

int ye1(int n,int x,int y)

{
        int i,sum;
        if(x<=2)
        {
                if(n%4==0)
                {
                        sum+=1;
                        for(i+1;i<13;i++)
                        {
                                sum+=a[i];
                        }
                }else{
                        for(i=x+1;i<13;i++)
                        {
                                sum+=a[i];
                        }
                }
                sum=sum+y;
        }
        return sum;
}
int nian(int x,int y)

{
        int i,sum=0;
        for(i=x+1;i<y;i++)
        {
                if(i%4==0)
                {
                        sum+=366;
                }else{
                        sum+=365;
                }
        }
        return sum;
}


int main()

{
        int sum,n1,y1,r1,n2,y2,r2;
        printf("请输入第一个日期(xxxx-xx-xx):");
        scanf("%d-%d-%d",&n1,&y1,&r1);
        printf("请输入第二个日期(xxxx-xx-xx):");
        scanf("%d-%d-%d",&n2,&y2,&r2);
        if(n1=n2)
        {
                sum=ye1(n1,y1,r1)+ye2(n2,y2,r2);
        }else{
                sum=nian(n1,n2)+ye1(n1,y1,r1)+ye2(n2,y2,r2);
        }
        printf("第一个日期到第二个日期一共%d天\n",sum);
        return 0;
}
2016-04-14 21:08
未来大仙
Rank: 6Rank: 6
来 自:黑窟窿
等 级:侠之大者
威 望:4
帖 子:263
专家分:491
注 册:2015-6-20
收藏
得分:7 
大哥,你不把注释弄上,别人看起来很辛苦

好好学习,天天向上!
2016-04-15 08:26
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:7 
你的逻辑错了,请先想清楚日期间隔具体是怎么算的。
程序代码:
#include <stdio.h>

int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

//日期是此年的第几天
int ye(int n,int x,int y)
{
        int i,sum=0;
        if(x>=3)  //x>=3
        {
                if((n%400==0)||(n%100!=0&&n%4==0))  //for leap year
                {
                    sum=1;
                }

                for(i=x-1;i>0;i--)
                {
                    sum=sum+a[i];
                }

                sum=sum+y;
        }
        else //x<=2
        {
            if(x==1)  sum=y;
            else  sum=31+y;
        }

        return sum;
}
//年与年之前的日期差,仅以1月1日算
int nian(int x,int y)
{
        int i,sum=0,tmp;
        if(x>y)  //make sure x>y
        {
            tmp=x;
            x=y;
            y=tmp;
        }

        for(i=x;i<y;i++)
        {
                if((i%400==0)||(i%100!=0&&i%4==0))
                {
                        sum+=366;
                }else{
                        sum+=365;
                }
        }

        return sum;
}

int main()
{
        int sum,n1,y1,r1,n2,y2,r2;
        printf("The first date:(xxxx-xx-xx):");
        scanf("%d-%d-%d",&n1,&y1,&r1);
        printf("The second date(xxxx-xx-xx):");
        scanf("%d-%d-%d",&n2,&y2,&r2);
        if(n1==n2)  //n1==n2
        {
                sum=ye(n1,y1,r1)-ye(n2,y2,r2);  //
                if(sum<0)  sum=(-1)*sum;  //
        }
        else
        {   
                //不同年日期的间隔天数=年与年之前的日期差,仅以1月1日算+大年的当前天数-小年的当前天数
                sum=nian(n1,n2);
                if(n1>n2)  sum=sum+ye(n1,y1,r1)-ye(n2,y2,r2);
                else  sum=sum+ye(n2,y2,r2)-ye(n1,y1,r1);

        }

        printf("There are %d days long.\n",sum);

        return 0;
}


[此贴子已经被作者于2016-4-15 09:04编辑过]


   唯实惟新 至诚致志
2016-04-15 08:45
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:7 
先把代码错误发出来,算法错误你自己去完善吧,没有考虑两个年之间的关系。相等时也计算了一整年的天数,相差2年以上没考虑......

程序代码:
#include<stdio.h>
int a[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };


int ye2(int n, int x, int y)
{
    int i, sum = 0;
    if (x >= 2)
    {
        if (n % 4 == 0)
        {
            sum = sum + 1;
            for (i = x - 1; i>0; i--)    //应该是i--
            {
                sum = sum + a[i];
            }
        }
        else {

            for (i = x - 1; i>0; i--)
            {
                sum = sum + a[i];
            }
        }
        sum = sum + y;
    }
    return sum;
}

int ye1(int n, int x, int y)

{
    int i, sum = 0;//sum没有初始化就使用了
    if (x <= 2)
    {
        if (n % 4 == 0)
        {
            sum += 1;
            for (i = 1; i<13; i++)//应该是i = 1不是i+ 1
            {
                sum += a[i];
            }
        }
        else {
            for (i = x + 1; i<13; i++)
            {
                sum += a[i];
            }
        }
        sum = sum + y;
    }
    return sum;
}
int nian(int x, int y)

{
    int i, sum = 0;
    for (i = x + 1; i<y; i++)
    {
        if (i % 4 == 0)
        {
            sum += 366;
        }
        else {
            sum += 365;
        }
    }
    return sum;
}


int main()

{
    int sum, n1, y1, r1, n2, y2, r2;
    printf("请输入第一个日期(xxxx-xx-xx):");
    scanf("%d-%d-%d", &n1, &y1, &r1);
    printf("请输入第二个日期(xxxx-xx-xx):");
    scanf("%d-%d-%d", &n2, &y2, &r2);
    if (n1 = n2)
    {
        sum = ye1(n1, y1, r1) + ye2(n2, y2, r2);
    }
    else {
        sum = nian(n1, n2) + ye1(n1, y1, r1) + ye2(n2, y2, r2);
    }
    printf("第一个日期到第二个日期一共%d天\n", sum);
    return 0;
}
2016-04-15 08:58
快速回复:计算出任意二个时间之间的天数,不知道哪里出错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020776 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved