zoukankan      html  css  js  c++  java
  • 日期差值(王道)

    描述:有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天

    输入:有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

    输出:每组数据输出一行,即日期差值

    样例输入:

    20110412

    20110422

    样例输出:

    11

     (这个代码是根据王道机试上的答案改编的,实际上并没能运行出来,编译没有问题,但while处空间?太大了)

    #include <stdio.h>
    #include <stdlib.h>
    #define ISYEAR(x) x % 100 !=0 && x % 4 == 0 || x % 400 == 0 ? 1: 0
    
    int dayOfMonth[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 buf[5001][13][32];
    int Abs(int x){
    return x < 0 ? -x : x;
    }
    
    void nextDay(int Day, int Month,int Year){
    Day++;
    if(Day>dayOfMonth[Month][ISYEAR(Year)]){
        Day = 1;
        Month ++;
        if(Month > 12){
            Month = 1;
            Year ++;
        }
    }
    }
    
    struct Date{
    int Day;
    int Month;
    int Year;
    };
    struct Date date;
    
    int main()
    {
        int count = 0;
        date.Day=1;
        date.Month=1;
        date.Year=0;
        while(date.Year!=5001){
            buf[date.Year][date.Month][date.Day] = count;
            nextDay(date.Year,date.Month,date.Day);
            count++;
        }
        int d1,m1,y1;
        int d2,m2,y2;
        scanf("%4d%2d%2d",&y1,&m1,&d1);
        scanf("%4d%2d%2d",&y2,&m2,&d2);
        count = Abs(buf[y2][m2][d2]-buf[y1][m1][d1]);
        printf("%d
    ",count);
        return 0;
    }

    总结:上面有几个地方我觉得适合学习一下,首先是宏判断进行判断闰年,实际上也可以用函数进行,包括dayofMonth也可以成为一个一维数组而不是二维数组;

    实际上之前struct里面有函数的,但后来报错,我就拿出来了,但本来是应该运行ok的,这种用法也很是我以前没这么使用过的。

    struct Date{
    int Day;
    int Month;
    int Year;
    void nextDay(){
    Day++;
    if(Day>dayOfMonth[Month][ISYEAR(Year)]){
        Day = 1;
        Month ++;
        if(Month > 12){
            Month = 1;
            Year ++;
        }
    }
    }
    };

    要注意一个问题,C语言和c++里的struct使用是不大一样的,C语言在声明变量时是一定要在前面写struct的,例如

    struct student{
    ...
    };
    struct student stu1;    //struct不可省略

    c++可以省略:

    struct student{
    ...
    };
    student stu1;    //struct可省略

    具体C语言的结构体定义看文章:C语言结构体定义的几种方法

  • 相关阅读:
    shell中使用echo命令改变输出显示样式
    Shell脚本报错unary operator expected
    shell运行报 too many arguments错误
    写shell,运行出错:syntax error near unexpected token `$’do ”
    shell 脚本执行,出现错误bad interpreter: No such file or directory
    Linux 基本命令学习笔记
    如何运行 O’Reilly 书 Python for Finance 的源代码
    IntelliJ 中配置 Anaconda
    Windows 10 中安装 Anaconda 3
    Windows 中安装的 Python 如何卸载
  • 原文地址:https://www.cnblogs.com/xym4869/p/8508943.html
Copyright © 2011-2022 走看看