| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1316 人关注过本帖
标题:有关日期差的问题 求指点
只看楼主 加入收藏
宁缺T
Rank: 1
等 级:新手上路
帖 子:21
专家分:8
注 册:2019-9-12
结帖率:87.5%
收藏
已结贴  问题点数:25 回复次数:4 
有关日期差的问题 求指点
计算时间差我是按较小的年份一天一天加到较大年份的。
图片附件: 游客没有浏览图片的权限,请 登录注册

代码如下:

程序代码:
#include<stdio.h>
#include<stdbool.h>
    bool isLeap(int year){
        return (year%4==0&&year%100!=0) || (year%400==0);
    }
int main(){
    int month[13][2]={(0,0),(31,31),(28,29),(31,31),(30,30),(31,31),(30,30),(31,31),(31,31),(30,30),(31,31),(30,30),(31,31)};
    int time1,y1,m1,d1;
    int time2,y2,m2,d2;
    int tmp;
    int cnt=1;
    while(scanf("%d%d",&time1,&time2)!=EOF)//输入年月日并将较大值放入time2中

    {
        if(time1>time2){
            tmp=time1;

            time1=time2;
            time2=tmp;
        }
    }
    //从8位数据中分离出年月日

    y1=time1/10000;
    m1=time1/100%100;
    d1=time1%100;
   

    y2=time2/10000;
    m2=time2/100%100;
    d2=time2%100;
    //计算从time1到time2所需天数

//    do{
//        d1++;
//         cnt++;
//        if(d1>month[m1][isLeap(y1)]){
//            d1=1;
//            m1++;
//    
//        }
//        if(m1>12){
//            y1++;
//            m1=1;
//        }
//       

//    }while(y1!=y2&&m1!=m2&&d1!=d2);//do-while就不知道哪里有问题了
   

    while(y1<y2||m1<m2||d1<d2)
    {
        d1++;
        if(d1==month[m1][isLeap(y1)]+1)//我写的是if(d1>month[m1][isLeap(y1)])
        {
            d1=1;
            m1++;
        }
        if(m1==13)//同上if(m1>12)
        {
            y1++;
            m1=1;
        }
        cnt++;
    }
    printf("%d\n",cnt);
    return 0;
   

}
   
但是用自己的逻辑判断就得不到结果了。
搜索更多相关主题的帖子: 日期 int || if year 
2019-12-08 19:13
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
收藏
得分:20 
初始化数组可以用小括号?
2019-12-09 16:04
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
收藏
得分:5 
程序逻辑没有问题,主要是数组初始化出了问题
2019-12-09 16:07
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:570
专家分:3727
注 册:2019-7-29
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdbool.h>

bool isLeap(int year);

bool isLeap(int year)
{
    return (year%4==0&&year%100!=0) || (year%400==0);
}

int main()
{
    int month[13][2]={{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
    int y1,m1,d1,y2,m2,d2;
    long long int time1,time2,tmp;
    int cnt=1;

    scanf("%lld",&time1);//输入年月日并将较大值放入time2中
    scanf("%lld",&time2);

    if(time1>time2)
    {
        tmp=time1;
        time1=time2;
        time2=tmp;
    }

    //从8位数据中分离出年月日

    y1=time1/10000;
    m1=time1/100%100;
    d1=time1%100;

    y2=time2/10000;
    m2=time2/100%100;
    d2=time2%100;
    //计算从time1到time2所需天数
    //printf("y=%d,m=%d,d=%d,y=%d,m=%d,d=%d\n",y1,m1,d1,y2,m2,d2);

    while(y1<y2||m1<m2||d1<d2)
    {
        d1++;
        if(d1==month[m1][isLeap(y1)]+1)//我写的是if(d1>month[m1][isLeap(y1)])
        {
            d1=1;
            m1++;
        }
        if(m1==13)//同上if(m1>12)
        {
            y1++;
            m1=1;
            d1=1;
        }
        cnt++;
        //printf("cnt=%d,%d-%d-%d\n",cnt,y1,m1,d1);
    }

    printf("%d\n",cnt);
    return 0;


}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-12-09 20:20
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:570
专家分:3727
注 册:2019-7-29
收藏
得分:0 
楼主,你这个结帖给分是个什么意思

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-12-09 22:12
快速回复:有关日期差的问题 求指点
数据加载中...
 
   



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

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