【两日一练】学习记录

题目

  1. 编写程序,输入两个日期(年、月、日,年、月、日),输出这两个日期之间相隔多少天。

思路

要求任意两个日期相差的天数,首先要求出两年直接相差的天数,然后分别计算每个日期距离自己的年初有多少天。最后通过如下公式即可求出天数。
总天数 = year1和year2相差天数 + date2距离年初的天数 - date1距离年初的天数

代码

#define _CRT_SECURE_NO_WARNINGS   // _crt_secure_no_warnings
#include <stdio.h>
#include <stdlib.h>

int isleap(int year);

int main()
{
    int i,j;
    int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int year[2],month[2],day[2],data;
    int sum[2]={0},days=0;
    for(i=0;i<2;i++)
    {
        printf("请输入第%d日期:\n",i+1);

yea:
        printf("年:");
        scanf("%d",&year[i]);
        if(year[i]>9999 || year[i]<=0)
        {
            printf("请输入正确的年份\n");
            goto yea;
        }
mon:
        printf("月:");
        scanf("%d",&month[i]);
        if(month[i]<=0 || month[i]>12)
        {
            printf("请输入正确的月份\n");
            goto mon;
        }
da:
        printf("日:");
        scanf("%d",&day[i]);
        if(day[i]<=0 || day[i]>28)
        {
            if(2==month[i])
            {
                data=isleap(year[i]);
                if(data)
                {
                    if(29!=day[i])
                    {
                        printf("请输入正确的日期\n");
                        goto da;
                    }
                }else{
                    printf("请输入正确的日期\n");
                    goto da;
                }
            }else if(4==month[i] || 6==month[i] || 9==month[i] || 11==month[i])
            {
                if(day[i]>30 || day[i]<=0)
                    {
                        printf("请输入正确的日期\n");
                        goto da;
                    }
            }else if(day[i]>31 || day[i]<=0)
            {
                printf("请输入正确的日期\n");
                goto da;
            }
        }
    }

    for(i=0;i<2;i++)
    {
        for(j=1;j<month[i];j++)
        {
            sum[i]=sum[i]+a[j];
        }
        sum[i]+=day[i];
        data=isleap(year[i]);
        if(data && month[i]>2)
        {
            sum[i]+=1;
        }
    }
    for(i=year[0];i<year[1];i++)
    {
        if(isleap(i))
        {
            days+=366;
        }else{
            days+=365;
        }
    }
    days=days+sum[1]-sum[0];
    printf("相差%d天\n",days);
    system("pause");
}

//判断是否为闰年
int isleap(int year)
{
    if(0==year%4 && 0!=year%100 || 0==year%400)
        return 1;
    else
        return 0;
}

执行结果
图片说明

全部评论

相关推荐

(黑话警告⚠️:hc=岗位数量,&nbsp;mt=导师,&nbsp;ld=直属领导,&nbsp;cr=代码审查)25年1月,我加入了字节某前端团队,并期望能在这里待到秋招并尝试转正。然而,就在上周,ld&nbsp;找我1v1,告诉我,我的能力和团队预期不太匹配,并和我劝退。晴天霹雳吗?肯定是有的。那一刻,脑子里嗡嗡作响,各种情绪翻涌。但冷静下来想想,这几个月,自己在能掌控的范围内,确实有不少地方做得不尽如人意。所以,我想把这段不算成功的经历复盘一下,希望能给同样在努力转正的你提个醒,避开我踩过的坑。一、ld&nbsp;的要求要注意刚进组时,ld就和我聊过转正的事。我当时发问:“咱们这儿有hc&nbsp;吗?”&nbsp;ld没直接回答,只是说:“看能力,能力到了...
牛客上的彭于晏:过来人告诉你,入职后要做的第一件事儿不是说主动找活儿做,你要先学会融入团队,摸清ld的性格,投其所好。然后才是展示你的能力,能力上可以说技术或者业务,以业务能力为主,技术能力为辅。优先保证自己对业务需求的开发保证质量效率,然后再谈技术的问题,不要你觉得啥啥啥不行就想着整体优化了(发现校招生最喜欢干这事儿),我工作快5年了发现搞这种的最后都没啥好的结果,产出没有还引入新的bug,校招或者实习的水平看到的问题别人看不到嘛?为什么别人不去搞?浪费时间还没收益的事儿不要去做,技术上的能力体现在对于一个新需求,在不符合现在业务发展的架构设计上,你能拿出好的技术方案同时能考虑到后续业务发展逐渐将技术架构引入合理的架构,这是一个漫长的过程而不是一次性的
点赞 评论 收藏
分享
缒梦&独舞:这家公司是这样的,去年给我实习offer了,不过也是面着玩儿的,他周六还要去做公益志愿活动
点赞 评论 收藏
分享
LemontreeN:有的兄弟有的我今天一天面了五场,4个二面一个hr面
投递字节跳动等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务