获得月份天数

简介: 获得月份天数

【编程题】获得月份天数 -- 来自牛客网


链接:【BC54】获得月份天数[牛客网]

题目要求:输入年份和月份,计算这一年这个月有多少天。


输入描述:多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。

输出描述:针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。

注意:

下面👇方案中,我把代码解释放到代码里面

方案一:if...else语句

有逻辑性,方便看明白

int main()
{
  //y表示年份year,m表示月份month,d表示天数day
  int y = 0, m = 0, d = 0;
  //printf("请输入某年某月份:");
  while (scanf("%d %d", &y, &m) != EOF)
  {
    //判断月份的输入是否错误
    if (m > 12 && m < 1)
    {
      printf("输入月份错误,请重新输入:");
    }
    else
    {
      //判断年份是否闰年
      if ((y % 100 != 0 && y % 4 == 0) || (y % 400 == 0))
      {
        if (m == 2)
        {
          d = 29;
        }
        else if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
        {
          d = 31;
        }
        else
        {
          d = 30;
        }
      }
      //年份不是闰年
      else
      {
        if (m == 2)
        {
          d = 28;
        }
        else if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
        {
          d = 31;
        }
        else
        {
          d = 30;
        }
      }
 
    }
    //printf("%d年%d月份的天数是:%d\n", y, m, d);
    
    //printf("请输入某年某月份:");
 
  }
  return 0;
}

方案二:数组(最简单)

int main()
{
  int y = 0, m = 0, day = 0;
  int d[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
  //注意下标: 0  1  2  3  4  5  6  7  8  9  10 11 12(1月份对应下标1,以此类推)
  //输入年份和月份
  while (scanf("%d %d", &y, &m) != EOF)
  {
    day = d[m];
    //判断是否闰年
    if ((y % 400 == 0) && ((y % 100 != 0) || (y % 4 == 0)))
    {
      if(m==2)
      {
        day++;
      }
    }
    printf("%d\n", day);
  }
}

方案三:switch语句

 

int is_runnian(int y)
{
  if ((y % 400 == 0) && ((y % 100 != 0) || (y % 4 == 0))) 
    return 1;
  else
    return 0;
}
 
int main()
{
  int y = 0, m = 0;
  while(scanf("%d %d", &y, &m)!=EOF)
  {
    int d = 31;
    switch (m)
    {
    case 4:
    case 6:
    case 9:
    case 11:
    {
      d = 30;
      break;
    }
    case 2:
    {
      if (is_runnian(y))
        d = 29;
      else
        d = 28;
      break;
    }
    }
    printf("%d\n", d);
  }
}
目录
相关文章
|
存储 安全 对象存储
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
本文详细介绍了怎样帮助新手小白从注册,购买阿里云OSS,到一步一步配置OSS做为图床,和PicGo、Typora软件连接,配置好关联之后,在使用Typora写文章时,如果需要插入图片,只需要将图片复制粘贴到Typora的编辑区域,就会自动通过PicGo上传到指定图床,自动复制外网能访问的URL并展示,简直不要太方便,极大的解决了编辑文章时复制处理图片链接的痛点。
13539 15
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
|
存储 安全 数据管理
阿里云OSS图床搭建
阿里云OSS图床搭建
9674 3
|
7月前
|
存储 安全 API
Typora介绍、安装、图床设置和使用
Typora是一款简洁高效的Markdown编辑器,支持实时预览、数学公式编辑、表格制作与多格式导出,适用于写作、学术与技术文档。本文详细介绍其安装、激活、主题设置、图床配置(PicGo+SM.MS/COS/OSS)及常用功能使用,助你高效搭建写作环境。
1480 3
Typora介绍、安装、图床设置和使用
|
8月前
|
Java API 网络架构
java调用api接口自动判断节假日信息
java调用api接口自动判断节假日信息
2845 0
|
存储 Python
提升工作效率:获取任意月份的所有工作日
本文介绍了如何使用 Python 编写一个简单程序,以获取任意月份的所有工作日。通过 `datetime` 和 `calendar` 模块,程序能够准确地识别出每个月的周一至周五,帮助用户高效管理时间和任务。
557 6
|
存储 easyexcel Java
SpringBoot+EasyExcel轻松实现300万数据快速导出!
本文介绍了在项目开发中使用Apache POI进行数据导入导出的常见问题及解决方案。首先比较了HSSFWorkbook、XSSFWorkbook和SXSSFWorkbook三种传统POI版本的优缺点,然后根据数据量大小推荐了合适的使用场景。接着重点介绍了如何使用EasyExcel处理超百万数据的导入导出,包括分批查询、分批写入Excel、分批插入数据库等技术细节。通过测试,300万数据的导出用时约2分15秒,导入用时约91秒,展示了高效的数据处理能力。最后总结了公司现有做法的不足,并提出了改进方向。
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
算法 应用服务中间件 Shell
搭建高可用负载均衡器: haproxy+keepalived
企业业务量比较小的时候,单台服务器就可以满足业务需要了。但是随着业务发展,单服务器的问题就凸显出来了,如何透明的扩展服务器和带宽,增加服务器吞吐量呢?负载均衡器可以解决以上问题。
10423 47
|
前端开发 Java 项目管理
List.of 问题之使用List.of方法为什么会引发前端解析失败的问题,如何解决
List.of 问题之使用List.of方法为什么会引发前端解析失败的问题,如何解决
|
域名解析 网络协议 CDN
网站接入阿里云CDN实现域名加速全流程
阿小云网站已通过ICP备案在广州节点上线,但为提升全国用户访问速度,计划接入CDN。以下是4步CDN接入教程:1) 开通阿里云CDN服务;2) 添加加速域名;3) 使用DNS解析验证域名归属权;4) 配置CNAME实现域名与CDN节点关联。详细指南见阿里云CDN官方文档。
1074 2