首页 > 其他分享 >c语言:日期识别1

c语言:日期识别1

时间:2024-03-23 20:03:23浏览次数:21  
标签:12 语言 else month 日期 year 识别 day

日期识别1

任务描述

X同学最近非常烦,因为他正面对一大堆日期数据愁眉不展,原因是那些日期书写的极其不规范,不仔细辨别根本认不清是哪一天。
以下每个日期中的三个数,年月日的位置是不确定的,假设其中最大的数表示年份,1-12范围的数表示月份,1-31范围的数表示日期,如果月日的范围都是1-12则按前月后日的顺序识别。
例如:
2/3-123 识别为0123年2月3日,合法;
13+12+45 识别为0045年12月13日,合法;
12=3=13 识别为0013年12月3日,合法;
29,2,2019 识别为2019年2月29日,这一天不存在,不合法;
12@12#12 识别为0012年12月12日,合法;
35.36.37 识别为0037年XX月XX日,XX超出月份和日期范围,不合法;
113030 识别为0030年11月30日,合法;

现在X要编程判断一下那些日期到底是否合法,你们说他能编出来吗。

输入格式:
一行,以X-Y-Z形式表示的一个日期,其中X、Y、Z为不超过4位的正整数,“-”为一个分隔字符,可能为任何符号。

输出格式:
若该日期为合法存在的日期,以“YYYY-MM-DD”的形式输出该日期的规范式,年4位,月日2位,不足前补0。
若该日期为不合法日期,输出:Invalid Date!。

输入示例1

25-30-5

输出示例1

0030-05-25

输入示例2

2019-32-09

输出示例2

Invalid Date!

代码

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main() {
    int x, y, z;
    int year, month, day;
    char separator;
    scanf("%d%c%d%c%d", &x, &separator, &y, &separator, &z);
    if (x > y && x > z) {
        year = x;
        if (y <= 12) {
            month = y;
            day = z;
        } else if (y > z) {
            month = z;
            day = y;
        } else {
            month = y;
            day = z;
        }
    } else if (y > x && y > z) {
        year = y;
        if (x <= 12) {
            month = x;
            day = z;
        } else if (x > z) {
            month = z;
            day = x;
        } else {
            month = x;
            day = z;
        }
    } else {
        year = z;
        if (x <= 12) {
            month = x;
            day = y;
        } else if (x > y) {
            month = y;
            day = x;
        } else {
            month = x;
            day = y;
        }
    }
    if (month < 1 || month > 12 || day < 1 || day > 31) {
        printf("Invalid Date!");
        return 0;
    }
    if ((month == 4 || month == 6 || month == 9 || month == 11) && day > 30) {
        printf("Invalid Date!");
        return 0;
    } else if (month == 2) {
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
            if (day > 29) {
                printf("Invalid Date!");
                return 0;
            }
        } else {
            if (day > 28) {
                printf("Invalid Date!");
                return 0;
            }
        }
    }
    printf("%04d-%02d-%02d", year, month, day);
    return 0;
}

标签:12,语言,else,month,日期,year,识别,day
From: https://blog.csdn.net/qq_62717777/article/details/136879340

相关文章

  • 2024-03-23:用go语言,一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币,
    2024-03-23:用go语言,一张桌子上总共有n个硬币栈。每个栈有正整数个带面值的硬币,每一次操作中,你可以从任意一个栈的顶部取出1个硬币,从栈中移除它,并放入你的钱包里。给你一个列表piles,其中piles[i]是一个整数数组,分别表示第i个栈里从顶到底的硬币面值。同时给你......
  • 2024年C语言最新经典面试题汇总(1-10)
    C语言文章更新目录C语言学习资源汇总,史上最全面总结,没有之一C/C++学习资源(百度云盘链接)计算机二级资料(过级专用)C语言学习路线(从入门到实战)编写C语言程序的7个步骤和编程机制C语言基础-第一个C程序C语言基础-简单程序分析VS2019编写简单的C程序示例简单示例,VS2019调......
  • 中国电子学会(CEIT)2021年03月真题C语言软件编程等级考试三级(含详细解析答案)
    中国电子学会(CEIT)考评中心历届真题(含解析答案)C语言软件编程等级考试三级2021年03月编程题五道 总分:100分一、找和为K的两个元素(20分)在一个长度为n(n<1000)的整数序列中,判断是否存在某两个元素之和为k。时间限制:1000ms内存限制:65536kb输入第一行输入......
  • 水仙花数(C语言)
    文章目录水仙花数的起源思路运行代码水仙花数的起源水仙花数的名称来源于希腊神话中的美少年纳西索斯(Narcissus),其名字“Narcissus”与水仙花数的英文名称“Narcissisticnumber”的词根一致。水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。......
  • C语言进阶——动态内存管理
    目录一、C语言底层内存知识补充二、动态内存函数1.1free1.2malloc1.3calloc1.4realloc三、使用常见错误3.1对非动态开辟内存使用free释放3.2空指针未判断造成的错误3.3使用free释放一块动态开辟内存的一部分3.4对同一块动态内存多次释放3.5动态开辟内存没有释放而......
  • C语言——函数练习程序
    1.从终端接收一个数,封装一个函数判断该数是否为素数#include<stdio.h>intpri(intnum){inti=0;for(i=2;i<num;i++){if(num%i==0){return0;break;}}if(i==num-1)......
  • 前后文无关文法和语言练习
    目录产生语言{a^nb^n|n>=0}的文法产生语言{a^nb^n|n>=0}的文法要构造一个产生语言{a^nb^n|n>=0}的文法,我们可以使用上下文无关文法(Context-FreeGrammar,CFG)。这个语言包含所有由相同数量的连续a字符和连续b字符组成的字符串。下面是一个可能的文法:S......
  • 【C语言】整数和浮点数在内存中的存储
    点这里是个人主页~这次的内容是比较底层的奥,对于理解编程很重要~整数浮点数在内存中的存储一、整数在内存中的存储二、大小端字节序和字节序判断大小端的概念一道简单关于大小端排序的百度面试题三、简单理解数据类型存储范围例一例二例三例四例五例六四、浮点......
  • C语言的算符优先级
    C语言中提供许多算符,比如算术运算、逻辑运算、关系运算等,必须规定它们的优先级,否则将它们放到一起运算肯定要出乱子,正如算术中有先乘除后加减的规则,C语言同样要有确定的运算规则。C语言定义了15个算符优先级,其优先级规则如下:规则1:优先级高的先运算规则2:同一个优先级则需要按照结......
  • C语言 03 原码 反码 补码
    原码计算机中所有的数字都是使用0和1这样的二进制数来进行表示的。这时如果要存储一个数据,比如十进制的3,那么就需要使用2个二进制位来保存,二进制格式为11,占用两个位置,称为2bit位。一般占用8个bit位表示一个字节(B),2个字节等于1个字,所以一个字表示16个bit位......